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