package logic import ( "context" "time" "fusenapi/model" "fusenapi/server/home-user-auth/internal/svc" "fusenapi/server/home-user-auth/internal/types" "fusenapi/utils/basic" "github.com/golang-jwt/jwt" "github.com/zeromicro/go-zero/core/logx" ) type UserLoginLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewUserLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserLoginLogic { return &UserLoginLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *UserLoginLogic) genJwtToken(accessSecret string, accessExpire, nowSec, userid int64) (string, error) { claims := make(jwt.MapClaims) claims["exp"] = nowSec + accessExpire claims["iat"] = nowSec claims["userid"] = userid token := jwt.New(jwt.SigningMethodHS256) token.Claims = claims return token.SignedString([]byte(accessSecret)) } func (l *UserLoginLogic) UserLogin(req *types.RequestUserLogin) (resp *types.Response, jwtToken string) { m := model.NewFsUserModel(l.svcCtx.MysqlConn) userModel, err := m.FindOneByEmail(l.ctx, req.Name) if err == model.ErrNotFound { logx.Error(err) return resp.SetStatusWithMessage(basic.CodeServiceErr, err.Error()), jwtToken } if userModel.PasswordHash != req.Password { logx.Info("密码错误") return resp.SetStatusWithMessage(basic.CodeUnAuth, "密码错误"), jwtToken } // jwt 生成 nowSec := time.Now().Unix() jwtToken, err = l.genJwtToken(l.svcCtx.Config.Auth.AccessSecret, l.svcCtx.Config.Auth.AccessExpire, nowSec, userModel.Id) if err != nil { logx.Error(err) return resp.SetStatus(basic.CodeUnAuth), jwtToken } err = m.UpdateVerificationToken(l.ctx, userModel.Id, jwtToken) if err != nil { return resp.SetStatus(basic.CodeUnAuth), jwtToken } data := &types.DataUserLogin{ Token: jwtToken, } return resp.SetStatus(basic.CodeOK, data), jwtToken }