From e15d8d9bb24b08d2bba980febb869be7c4136070 Mon Sep 17 00:00:00 2001 From: Rogee Date: Fri, 6 Dec 2024 18:47:48 +0800 Subject: [PATCH] feat: mid --- backend/common/service/http/http.go | 3 ++- ..._userinfo.go => m_wechat_auth_userinfo.go} | 22 +++++++++++-------- backend/modules/users/service.go | 14 ++++++++++++ 3 files changed, 29 insertions(+), 10 deletions(-) rename backend/modules/middlewares/{mid_auth_userinfo.go => m_wechat_auth_userinfo.go} (70%) diff --git a/backend/common/service/http/http.go b/backend/common/service/http/http.go index a24b26c..fa60180 100644 --- a/backend/common/service/http/http.go +++ b/backend/common/service/http/http.go @@ -62,8 +62,9 @@ func Serve(cmd *cobra.Command, args []string) error { return container.Container.Invoke(func(http Http) error { mid := http.Middlewares http.Service.Engine.Use(mid.WeChatVerify) - http.Service.Engine.Use(mid.AuthUserInfo) + http.Service.Engine.Use(mid.WeChatAuthUserInfo) http.Service.Engine.Use(mid.WeChatSilentAuth) + http.Service.Engine.Use(mid.JwtParse) mounts := map[string][]string{ "/t/{tenant}": {"users", "medias"}, diff --git a/backend/modules/middlewares/mid_auth_userinfo.go b/backend/modules/middlewares/m_wechat_auth_userinfo.go similarity index 70% rename from backend/modules/middlewares/mid_auth_userinfo.go rename to backend/modules/middlewares/m_wechat_auth_userinfo.go index 40d5259..6382d83 100644 --- a/backend/modules/middlewares/mid_auth_userinfo.go +++ b/backend/modules/middlewares/m_wechat_auth_userinfo.go @@ -10,7 +10,7 @@ import ( log "github.com/sirupsen/logrus" ) -func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error { +func (f *Middlewares) WeChatAuthUserInfo(c fiber.Ctx) error { state := c.Query("state") code := c.Query("code") @@ -29,9 +29,19 @@ func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error { return errors.Wrap(err, "failed to get openid") } + tenantSlug := c.Path("tenant") + if tenantSlug == "" { + return errors.New("tenant is empty") + } + + tenantId, err := f.userSvc.GetTenantIDBySlug(c.Context(), tenantSlug) + if err != nil { + return errors.Wrap(err, "failed to get tenant id") + } + var oauthInfo pg.UserOAuth copier.Copy(&oauthInfo, token) - user, err := f.userSvc.GetOrNew(c.Context(), 1, token.Openid, oauthInfo) + user, err := f.userSvc.GetOrNew(c.Context(), tenantId, token.Openid, oauthInfo) if err != nil { return errors.Wrap(err, "failed to get user") } @@ -42,13 +52,7 @@ func (f *Middlewares) AuthUserInfo(c fiber.Ctx) error { if err != nil { return errors.Wrap(err, "failed to create token") } - - // set the openid to the cookie - c.Cookie(&fiber.Cookie{ - Name: "token", - Value: jwtToken, - HTTPOnly: true, - }) + _ = jwtToken return c.Redirect().To("/") } diff --git a/backend/modules/users/service.go b/backend/modules/users/service.go index 3c7a209..6821bb1 100644 --- a/backend/modules/users/service.go +++ b/backend/modules/users/service.go @@ -194,3 +194,17 @@ func (svc *Service) CreateTenantUser(ctx context.Context, userID, tenantID int64 } return nil } + +// GetTenantIDBySlug +func (svc *Service) GetTenantIDBySlug(ctx context.Context, slug string) (int64, error) { + log := svc.log.WithField("method", "GetTenantIDBySlug") + + stmt := table.Tenants.SELECT(table.Tenants.ID).WHERE(table.Tenants.Slug.EQ(String(slug))) + log.Debug(stmt.DebugSql()) + + var id int64 + if err := stmt.QueryContext(ctx, db.FromContext(ctx, svc.db), &id); err != nil { + return 0, errors.Wrap(err, "failed to query tenant id by slug") + } + return id, nil +}