package service import ( "github.com/druidcaesa/gotool" "strings" "ulink-admin/frame" "ulink-admin/modules/system/models/model" "ulink-admin/modules/system/models/req" "ulink-admin/pkg/jwt/client" "ulink-admin/pkg/jwt/common" ) type MemberLoginService struct { MemberService *SysMemberService `inject:""` SmsService *SmsService `inject:""` } // Login 用户登录业务处理 func (s MemberLoginService) Login(loginBody req.LoginBody) string { switch loginBody.LoginType { case common.LOGIN_TYPE_PASSWORD: //密码登录 return s.loginByPassword(loginBody) case common.LOGIN_TYPE_WEIXIN: //微信登录 case common.LOGIN_TYPE_PHONE: //手机登录 return s.loginByPhone(loginBody) } return "" } // LoginUser 获取当前登录用户 func (s MemberLoginService) LoginUser(c *frame.Context) *model.SysMember { token := c.Request.Header.Get("Authorization") str := strings.Split(token, " ") j := client.NewJWT() // parseToken 解析token包含的信息 claims, err := j.ParseToken(str[1]) if err != nil { gotool.Logs.ErrorLog().Println(err) } info := claims.UserInfo return info } func (s MemberLoginService) loginByPassword(body req.LoginBody) string { /* frame.CheckEmpty(body.Code, "验证码不能为空") bl := captcha.VerifyCaptcha(body.Uuid, body.Code) frame.CheckFalse(bl, "验证码错误")*/ frame.CheckEmpty(body.UserName, "用户名不能为空") frame.CheckEmpty(body.Password, "密码不能为空") user := s.MemberService.SysMemberDao.GetUserByUserName(body.UserName) frame.CheckNil(user, "用户不存在") bl := gotool.BcryptUtils.CompareHash(user.Password, body.Password) frame.CheckFalse(bl, "用户或密码错误") token, err := client.NewJWT().CreateUserToken(common.LOGIN_TYPE_PASSWORD, user) frame.CheckNotNil(err, "创建token错误") //数据存储到redis中 return token } func (s MemberLoginService) loginByPhone(body req.LoginBody) string { frame.CheckEmpty(body.Code, "验证码不能为空") frame.CheckEmpty(body.Phone, "手机号不能为空") //如果记录存在,可以登录 bl := s.SmsService.SmsDao.Exist(model.Sms{}.TableName(), "code=? and phone!=? and state=?", body.Code, body.Phone, 1) frame.CheckFalse(bl, "短信验证码已不可用") user := s.MemberService.SysMemberDao.GetUserByPhone(body.Phone) frame.CheckNil(user, "用户不存在") token, err := client.NewJWT().CreateUserToken(common.LOGIN_TYPE_PHONE, user) frame.CheckSqlErr(err) //设置手机号已使用 _, err = s.SmsService.SmsDao.GetSession().Cols("state").Where("").Update(&model.Sms{State: 2}) frame.CheckSqlErr(err) //数据存储到redis中 return token }