From 4a9836db68e07983b2d4ffc6c8f158703c0adbd2 Mon Sep 17 00:00:00 2001 From: yanghao05 Date: Wed, 16 Apr 2025 20:16:41 +0800 Subject: [PATCH] feat: add admin login --- backend/app/http/admin/auth.go | 35 ++++++++++++++++++++++++++ backend/app/http/admin/provider.gen.go | 14 +++++++++++ backend/app/http/admin/routes.gen.go | 7 ++++++ backend/app/middlewares/mid_auth.go | 6 ++++- frontend/admin/src/api/authService.js | 4 +-- frontend/admin/src/pages/LoginPage.vue | 22 +++++++++++++--- frontend/admin/src/stores/auth.js | 14 +++++------ 7 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 backend/app/http/admin/auth.go diff --git a/backend/app/http/admin/auth.go b/backend/app/http/admin/auth.go new file mode 100644 index 0000000..7ee719b --- /dev/null +++ b/backend/app/http/admin/auth.go @@ -0,0 +1,35 @@ +package admin + +import ( + "quyun/providers/jwt" + + "github.com/gofiber/fiber/v3" +) + +// @provider +type auth struct { + jwt *jwt.JWT +} + +type AuthBody struct { + Username string `json:"username" validate:"required"` + Password string `json:"password" validate:"required"` +} + +// Login +// @Router /v1/admin/auth [post] +// @Bind body body +func (ctl *auth) Login(ctx fiber.Ctx, body *AuthBody) (string, error) { + if body.Username == "admin" && body.Password == "xixi@0202" { + claim := ctl.jwt.CreateClaims(jwt.BaseClaims{ + UserID: 1, + }) + + token, err := ctl.jwt.CreateToken(claim) + if err != nil { + return "", err + } + return token, nil + } + return "", fiber.ErrUnauthorized +} diff --git a/backend/app/http/admin/provider.gen.go b/backend/app/http/admin/provider.gen.go index b860552..045a7ad 100755 --- a/backend/app/http/admin/provider.gen.go +++ b/backend/app/http/admin/provider.gen.go @@ -3,6 +3,7 @@ package admin import ( "quyun/providers/ali" "quyun/providers/app" + "quyun/providers/jwt" "go.ipao.vip/atom" "go.ipao.vip/atom/container" @@ -11,6 +12,17 @@ import ( ) func Provide(opts ...opt.Option) error { + if err := container.Container.Provide(func( + jwt *jwt.JWT, + ) (*auth, error) { + obj := &auth{ + jwt: jwt, + } + + return obj, nil + }); err != nil { + return err + } if err := container.Container.Provide(func() (*medias, error) { obj := &medias{} @@ -33,6 +45,7 @@ func Provide(opts ...opt.Option) error { return err } if err := container.Container.Provide(func( + auth *auth, medias *medias, orders *orders, posts *posts, @@ -40,6 +53,7 @@ func Provide(opts ...opt.Option) error { users *users, ) (contracts.HttpRoute, error) { obj := &Routes{ + auth: auth, medias: medias, orders: orders, posts: posts, diff --git a/backend/app/http/admin/routes.gen.go b/backend/app/http/admin/routes.gen.go index f554143..18e0795 100644 --- a/backend/app/http/admin/routes.gen.go +++ b/backend/app/http/admin/routes.gen.go @@ -15,6 +15,7 @@ import ( // @provider contracts.HttpRoute atom.GroupRoutes type Routes struct { log *log.Entry `inject:"false"` + auth *auth medias *medias orders *orders posts *posts @@ -32,6 +33,12 @@ func (r *Routes) Name() string { } func (r *Routes) Register(router fiber.Router) { + // 注册路由组: auth + router.Post("/v1/admin/auth", DataFunc1( + r.auth.Login, + Body[AuthBody]("body"), + )) + // 注册路由组: medias router.Get("/v1/admin/medias", DataFunc2( r.medias.List, diff --git a/backend/app/middlewares/mid_auth.go b/backend/app/middlewares/mid_auth.go index 3047f25..987af1e 100644 --- a/backend/app/middlewares/mid_auth.go +++ b/backend/app/middlewares/mid_auth.go @@ -11,7 +11,11 @@ import ( ) func (f *Middlewares) Auth(ctx fiber.Ctx) error { - if strings.HasPrefix(ctx.Path(), "/admin/") { + if ctx.Path() == "/v1/admin/auth" { + return ctx.Next() + } + + if strings.HasPrefix(ctx.Path(), "/v1/admin/") { return ctx.Next() } diff --git a/frontend/admin/src/api/authService.js b/frontend/admin/src/api/authService.js index e1ead84..dcfef21 100644 --- a/frontend/admin/src/api/authService.js +++ b/frontend/admin/src/api/authService.js @@ -1,7 +1,7 @@ -import { http } from '@/utils/http'; +import httpClient from './httpClient'; export const authService = { login(username, password) { - return http.post('/admin/auth/login', { username, password }); + return httpClient.post('/admin/auth', { username, password }); }, }; diff --git a/frontend/admin/src/pages/LoginPage.vue b/frontend/admin/src/pages/LoginPage.vue index 6428f48..921446f 100644 --- a/frontend/admin/src/pages/LoginPage.vue +++ b/frontend/admin/src/pages/LoginPage.vue @@ -1,4 +1,5 @@