package user import ( "context" "backend/usercenter/api/internal/svc" "backend/usercenter/api/internal/types" "backend/usercenter/orm" "backend/utils" "github.com/zeromicro/go-zero/core/logx" "gorm.io/gorm" // github.com/spf13/cast // 类型转换 // github.com/golang-module/carbon/v2 // 日期时间处理 // github.com/jinzhu/copier/v2 // 结构体复制 // orm 目录下的 orm 包 ) 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) UserLogin(req *types.LoginRequest) (resp *types.UsersResponse, err error) { // 查找用户名或者手机号 user := new(orm.User) result := l.svcCtx.Db.Where("name = ? or phone = ?", req.Identity, req.Identity).First(user) if result.Error != nil && result.Error != gorm.ErrRecordNotFound { return &types.UsersResponse{ Success: false, Message: result.Error.Error(), Data: nil, Code: 200, }, nil } if result.Error == gorm.ErrRecordNotFound { return &types.UsersResponse{ Success: false, Message: "用户名或者手机号不存在", Data: nil, Code: 200, }, nil } // 检查密码 password := req.Password if password == "" { return &types.UsersResponse{ Success: false, Message: "密码不能为空", Data: nil, Code: 200, }, nil } // 检查密码是否正确 if !utils.CheckPassword(user.Password, req.Password) { return &types.UsersResponse{ Success: false, Message: "密码错误", Data: nil, Code: 200, }, nil } // 生成token jwtUtil := utils.NewJWTUtil(l.svcCtx.Config.Auth.AccessSecret, l.svcCtx.Config.Auth.AccessExpire, l.svcCtx.RedisClient, l.svcCtx.Config.TkStore) token, err := jwtUtil.GenerateToken(l.ctx, int64(user.ID), user.Name) if err != nil { return &types.UsersResponse{ Success: false, Message: err.Error(), Data: nil, Code: 200, }, nil } return &types.UsersResponse{ Success: true, Message: "登录成功", Data: token, Code: 200, }, nil }