附近小店
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.

преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package svc
  2. import (
  3. "applet/app/db"
  4. "applet/app/db/model"
  5. "applet/app/e"
  6. "applet/app/md"
  7. "applet/app/utils"
  8. "applet/app/utils/cache"
  9. "applet/app/utils/logx"
  10. "errors"
  11. "fmt"
  12. "github.com/gin-gonic/gin"
  13. "strings"
  14. )
  15. // GetDefaultUser is 获取默认账号,uid =0 为系统默认账号,用于一些请求需要渠道id之类的东西
  16. func GetDefaultUser(c *gin.Context, token string) (*md.User, error) {
  17. user := new(md.User)
  18. if c.GetString("convert_url") == "1" { //转链接口
  19. goto DEFALUT
  20. } else {
  21. // Token 不为空时拿对应的用户数据
  22. if token != "" && strings.Contains(token, "Bearer") {
  23. user, err := CheckUser(c)
  24. if user == nil {
  25. return nil, errors.New("token is expired")
  26. }
  27. if err != nil {
  28. // 有报错自己拿默认用户
  29. goto DEFALUT
  30. }
  31. return user, nil
  32. }
  33. }
  34. DEFALUT:
  35. // 默认拿uid 等于0的用户数据
  36. profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], 0)
  37. if err != nil {
  38. return nil, err
  39. }
  40. info, err := db.UserFindByID(db.DBs[c.GetString("mid")], 0)
  41. if err != nil {
  42. return nil, err
  43. }
  44. ul, err := db.UserLevelInIDescByWeightLowWithOne(db.DBs[c.GetString("mid")])
  45. if err != nil {
  46. return nil, err
  47. }
  48. user.Info = info
  49. user.Profile = profile
  50. user.Level = ul
  51. return user, nil
  52. }
  53. func FastLoginUserExist(c *gin.Context, r *md.LoginResponse, requestBody *md.FastLoginRequestBody) error {
  54. // 每次登录都会刷新token
  55. var user = &model.User{}
  56. var err error
  57. if requestBody.Mobile != "" {
  58. user, err = db.UserFindByMobileAll(db.DBs[c.GetString("mid")], requestBody.Mobile)
  59. }
  60. if user == nil || user.Uid == 0 {
  61. return e.NewErr(400, "用户不存在")
  62. }
  63. if err != nil {
  64. return err
  65. }
  66. if user.DeleteAt == 1 {
  67. return e.NewErr(403053, "账号被删除,如有疑问请联系客服")
  68. }
  69. //判断用户是否虚拟账号 虚拟账号不能用手机号登陆
  70. if user.IsFake == 1 {
  71. return e.NewErr(400000, "该手机号无法登陆,请联系客服!")
  72. }
  73. //0未激活,1正常,2冻结
  74. switch user.State {
  75. case 0:
  76. return e.NewErr(403028, "no active")
  77. case 2:
  78. return e.NewErr(403029, "您的账号已被冻结")
  79. }
  80. // 生成jwt
  81. appName := db.SysCfgGet(c, "app_name")
  82. profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], user.Uid)
  83. if err != nil || profile == nil {
  84. _ = logx.Warn(err)
  85. return e.NewErr(400000, "数据不完整")
  86. }
  87. token := CheckUserToken(c, user.Uid, user.Username, user.Phone, appName)
  88. r.Token = token
  89. r.UserID = utils.IntToStr(user.Uid)
  90. r.UserName = requestBody.Mobile
  91. r.Phone = requestBody.Mobile
  92. // 更新
  93. profile.ArkidToken = token
  94. _, err = db.UserProfileUpdate(db.DBs[c.GetString("mid")], user.Uid, profile)
  95. if err != nil {
  96. return logx.Warn(err)
  97. }
  98. // 写入缓存
  99. key := fmt.Sprintf("%s:token:%s", c.GetString("mid"), user.Username)
  100. _, err = cache.SetEx(key, token, 39528000) // 半年
  101. if err != nil {
  102. return logx.Warn(err)
  103. }
  104. return nil
  105. }
  106. func CheckUserToken(c *gin.Context, uid int, username, phone, appName string) string {
  107. profile, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], uid)
  108. if err != nil {
  109. e.OutErr(c, e.ERR_DB_ORM, err)
  110. return ""
  111. }
  112. token := profile.ArkidToken
  113. return token
  114. }