member_login_service.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package service
  2. import (
  3. "github.com/druidcaesa/gotool"
  4. "strings"
  5. "ulink-admin/frame"
  6. "ulink-admin/modules/system/models/model"
  7. "ulink-admin/modules/system/models/req"
  8. "ulink-admin/pkg/jwt/client"
  9. "ulink-admin/pkg/jwt/common"
  10. )
  11. type MemberLoginService struct {
  12. MemberService *SysMemberService `inject:""`
  13. SmsService *SmsService `inject:""`
  14. }
  15. // Login 用户登录业务处理
  16. func (s MemberLoginService) Login(loginBody req.LoginBody) string {
  17. switch loginBody.LoginType {
  18. case common.LOGIN_TYPE_PASSWORD: //密码登录
  19. return s.loginByPassword(loginBody)
  20. case common.LOGIN_TYPE_WEIXIN: //微信登录
  21. case common.LOGIN_TYPE_PHONE: //手机登录
  22. return s.loginByPhone(loginBody)
  23. }
  24. return ""
  25. }
  26. // LoginUser 获取当前登录用户
  27. func (s MemberLoginService) LoginUser(c *frame.Context) *model.SysMember {
  28. token := c.Request.Header.Get("Authorization")
  29. str := strings.Split(token, " ")
  30. j := client.NewJWT()
  31. // parseToken 解析token包含的信息
  32. claims, err := j.ParseToken(str[1])
  33. if err != nil {
  34. gotool.Logs.ErrorLog().Println(err)
  35. }
  36. info := claims.UserInfo
  37. return info
  38. }
  39. func (s MemberLoginService) loginByPassword(body req.LoginBody) string {
  40. /* frame.CheckEmpty(body.Code, "验证码不能为空")
  41. bl := captcha.VerifyCaptcha(body.Uuid, body.Code)
  42. frame.CheckFalse(bl, "验证码错误")*/
  43. frame.CheckEmpty(body.UserName, "用户名不能为空")
  44. frame.CheckEmpty(body.Password, "密码不能为空")
  45. user := s.MemberService.SysMemberDao.GetUserByUserName(body.UserName)
  46. frame.CheckNil(user, "用户不存在")
  47. bl := gotool.BcryptUtils.CompareHash(user.Password, body.Password)
  48. frame.CheckFalse(bl, "用户或密码错误")
  49. token, err := client.NewJWT().CreateUserToken(common.LOGIN_TYPE_PASSWORD, user)
  50. frame.CheckNotNil(err, "创建token错误")
  51. //数据存储到redis中
  52. return token
  53. }
  54. func (s MemberLoginService) loginByPhone(body req.LoginBody) string {
  55. frame.CheckEmpty(body.Code, "验证码不能为空")
  56. frame.CheckEmpty(body.Phone, "手机号不能为空")
  57. //如果记录存在,可以登录
  58. bl := s.SmsService.SmsDao.Exist(model.Sms{}.TableName(), "code=? and phone!=? and state=?", body.Code, body.Phone, 1)
  59. frame.CheckFalse(bl, "短信验证码已不可用")
  60. user := s.MemberService.SysMemberDao.GetUserByPhone(body.Phone)
  61. frame.CheckNil(user, "用户不存在")
  62. token, err := client.NewJWT().CreateUserToken(common.LOGIN_TYPE_PHONE, user)
  63. frame.CheckSqlErr(err)
  64. //设置手机号已使用
  65. _, err = s.SmsService.SmsDao.GetSession().Cols("state").Where("").Update(&model.Sms{State: 2})
  66. frame.CheckSqlErr(err)
  67. //数据存储到redis中
  68. return token
  69. }