You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

93 lines
2.2 KiB

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
}