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
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
|
|
}
|
|
|