fix wx auth logic

This commit is contained in:
2025-01-21 16:55:08 +08:00
parent 5abf4f2234
commit 8d3750618c
5 changed files with 452 additions and 15 deletions

View File

@@ -11,6 +11,7 @@ import (
"time"
"tydata-server/app/user/model"
jwtx "tydata-server/common/jwt"
"tydata-server/common/xerr"
"tydata-server/app/user/cmd/api/internal/svc"
"tydata-server/app/user/cmd/api/internal/types"
@@ -36,13 +37,13 @@ func (l *WxH5AuthLogic) WxH5Auth(req *types.WXH5AuthReq) (resp *types.WXH5AuthRe
// Step 1: 使用code获取access_token
accessTokenResp, err := GetAccessToken(req.Code)
if err != nil {
return nil, errors.Wrap(err, "获取access_token失败")
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取access_token失败: %+v", err)
}
// Step 2: 查找用户授权信息
userAuth, findErr := l.svcCtx.UserAuthModel.FindOneByAuthTypeAuthKey(l.ctx, accessTokenResp.Openid, "h5-weixin")
userAuth, findErr := l.svcCtx.UserAuthModel.FindOneByAuthTypeAuthKey(l.ctx, accessTokenResp.Openid, model.UserAuthTypeWxh5)
if findErr != nil && !errors.Is(findErr, model.ErrNotFound) {
return nil, errors.Wrapf(findErr, "查询用户授权失败,openid: %s", accessTokenResp.Openid)
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询用户授权失败,findErr: %v", findErr)
}
// Step 3: 查找或创建用户
@@ -51,12 +52,13 @@ func (l *WxH5AuthLogic) WxH5Auth(req *types.WXH5AuthReq) (resp *types.WXH5AuthRe
// 授权信息存在,查找用户
userModel, findUserErr := l.svcCtx.UserModel.FindOne(l.ctx, userAuth.UserId)
if findUserErr != nil {
return nil, errors.Wrapf(findUserErr, "查询用户失败userId: %d", userAuth.UserId)
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询用户失败userId: %v", findUserErr)
}
user = userModel
} else {
// 授权信息不存在,创建新用户
user = &model.User{}
user.Mobile = accessTokenResp.Openid
if transErr := l.svcCtx.UserModel.Trans(l.ctx, func(context context.Context, session sqlx.Session) error {
// 插入数据库
insertResult, insertErr := l.svcCtx.UserModel.Insert(l.ctx, session, user)
@@ -73,22 +75,21 @@ func (l *WxH5AuthLogic) WxH5Auth(req *types.WXH5AuthReq) (resp *types.WXH5AuthRe
userAuth = &model.UserAuth{
UserId: user.Id,
AuthKey: accessTokenResp.Openid,
AuthType: "mp-weixin", // 微信小程序
AuthType: model.UserAuthTypeWxh5, // 微信小程序
}
if _, insertUserAuthErr := l.svcCtx.UserAuthModel.Insert(l.ctx, session, userAuth); insertUserAuthErr != nil {
return errors.Wrapf(insertUserAuthErr, "创建用户授权失败openid: %s", accessTokenResp.Openid)
}
return nil
}); transErr != nil {
return nil, transErr
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "创建新用户事务失败: %v", transErr)
}
}
// Step 4: 生成JWT Token
token, genErr := jwtx.GenerateJwtToken(user.Id, l.svcCtx.Config.JwtAuth.AccessSecret, l.svcCtx.Config.JwtAuth.AccessExpire)
if genErr != nil {
return nil, errors.Wrap(genErr, "生成JWT token失败")
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成JWT token失败: %v", genErr)
}
now := time.Now().Unix()
@@ -106,8 +107,8 @@ type AccessTokenResp struct {
// GetAccessToken 通过code获取access_token
func GetAccessToken(code string) (*AccessTokenResp, error) {
appID := "wxd1554b7a57cecc9e"
appSecret := "fb8026c0bc66625b580453300d4b43db"
appID := "wxa581992dc74d860e"
appSecret := "cfca484cf8cebcccb1f16fbaf1d9fe2c"
url := fmt.Sprintf("https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code", appID, appSecret, code)

View File

@@ -7,7 +7,6 @@ import (
"database/sql"
"fmt"
"strings"
model2 "tydata-server/deploy/script/model"
"time"
@@ -102,7 +101,7 @@ func (m *defaultUserModel) FindOne(ctx context.Context, id int64) (*User, error)
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, model2.ErrNotFound
return nil, ErrNotFound
default:
return nil, err
}
@@ -122,7 +121,7 @@ func (m *defaultUserModel) FindOneByMobile(ctx context.Context, mobile string) (
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, model2.ErrNotFound
return nil, ErrNotFound
default:
return nil, err
}
@@ -173,7 +172,7 @@ func (m *defaultUserModel) UpdateWithVersion(ctx context.Context, session sqlx.S
return err
}
if updateCount == 0 {
return model2.ErrNoRowsUpdate
return ErrNoRowsUpdate
}
return nil

View File

@@ -12,4 +12,4 @@ var UserAuthTypeAppMobile string = "app_mobile" //平台内部
var UserAuthTypeAppWechat string = "app_wechat" //微信小程序
var UserAuthTypeH5Mobile string = "h5_mobile"
var UserAuthTypeWxMini string = "wx_mini"
var UserAuthTypeWxOfficialAccount string = "wx_official_account"
var UserAuthTypeWxh5 string = "wx_h5"