| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package logic
- import (
- "context"
- "slowwild/internal/svc"
- "slowwild/internal/errorx"
- "slowwild/internal/model"
- "slowwild/internal/utils"
- "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver"
- "github.com/zeromicro/go-zero/core/logx"
- )
- type LoginLogic struct {
- ctx context.Context
- svcCtx *svc.ServiceContext
- logx.Logger
- }
- func NewLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginLogic {
- return &LoginLogic{
- ctx: ctx,
- svcCtx: svcCtx,
- Logger: logx.WithContext(ctx),
- }
- }
- // 用户登录
- func (l *LoginLogic) Login(in *slowwildserver.LoginReq) (*slowwildserver.LoginAndRegisterRsp, error) {
- if in.Phone == "" {
- return nil, errorx.ErrInvalidParam
- }
- var user *model.User
- var err error
- // 查询用户是否存在
- user, err = l.svcCtx.UserModel.FindOneByPhone(l.ctx, in.Phone)
- if err == model.ErrNotFound {
- return nil, errorx.ErrUserNotFound
- }
- if err != nil {
- return nil, errorx.ErrUserQueryFailed
- }
- // 根据登录方式验证
- if in.LoginType == 1 { // 验证码登录
- if in.Code == "" {
- return nil, errorx.ErrInvalidParam
- }
- // TODO: 验证验证码
- // if !verifyCode(in.Phone, in.Code) {
- // return nil, errorx.NewCodeError(10004, "验证码错误")
- // }
- } else if in.LoginType == 2 { // 密码登录
- if in.Password == "" {
- return nil, errorx.ErrInvalidParam
- }
- // 验证密码
- if !verifyPassword(user.Password, user.Salt, in.Password) {
- return nil, errorx.NewCodeError(10005, "密码错误")
- }
- } else {
- return nil, errorx.ErrInvalidParam
- }
- // 生成token
- token, err := utils.GenerateToken(user.ID)
- if err != nil {
- return nil, errorx.NewCodeError(10006, "生成token失败")
- }
- // 更新最后登录IP
- err = l.svcCtx.UserModel.UpdateLoginIP(l.ctx, user.ID, in.LoginIp)
- if err != nil {
- l.Logger.Errorf("更新登录IP失败: %v", err)
- }
- return &slowwildserver.LoginAndRegisterRsp{
- Token: token,
- }, nil
- }
- // 验证密码
- func verifyPassword(dbPassword, salt, inputPassword string) bool {
- return dbPassword == utils.EncryptPassword(inputPassword, salt)
- }
|