package auth import ( "context" "errors" "time" "photography-backend/internal/svc" "photography-backend/internal/types" "photography-backend/pkg/utils/hash" "photography-backend/pkg/utils/jwt" "github.com/zeromicro/go-zero/core/logx" ) type LoginLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } // 用户登录 func NewLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginLogic { return &LoginLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *LoginLogic) Login(req *types.LoginRequest) (resp *types.LoginResponse, err error) { // 1. 验证用户名和密码 user, err := l.svcCtx.UserModel.FindOneByUsername(l.ctx, req.Username) if err != nil { return nil, err } // 2. 验证密码 if !hash.CheckPassword(req.Password, user.Password) { return nil, errors.New("用户名或密码错误") } // 3. 检查用户状态 if user.Status == 0 { return nil, errors.New("用户已被禁用") } // 4. 生成 JWT token token, err := jwt.GenerateToken(user.Id, user.Username, l.svcCtx.Config.Auth.AccessSecret, time.Hour*24*7) if err != nil { return nil, err } // 5. 返回登录结果 return &types.LoginResponse{ BaseResponse: types.BaseResponse{ Code: 200, Message: "登录成功", }, Data: types.LoginData{ Token: token, User: types.User{ Id: user.Id, Username: user.Username, Email: user.Email, Avatar: user.Avatar, Status: int(user.Status), CreatedAt: user.CreatedAt.Unix(), UpdatedAt: user.UpdatedAt.Unix(), }, }, }, nil }