附近小店
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

73 行
1.7 KiB

  1. package mw
  2. import (
  3. "errors"
  4. "applet/app/db"
  5. "applet/app/e"
  6. "applet/app/lib/arkid"
  7. "applet/app/md"
  8. "applet/app/utils"
  9. "github.com/gin-gonic/gin"
  10. )
  11. // 检查权限, 签名等等
  12. func Auth(c *gin.Context) {
  13. for k, v := range c.Request.Header {
  14. c.Set(k, v[0])
  15. }
  16. token, ok := c.Get("Token")
  17. if !ok {
  18. e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("没有找到token"))
  19. return
  20. }
  21. if token == "" {
  22. e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("token 不能为空"))
  23. return
  24. }
  25. tokenStr := utils.AnyToString(token)
  26. arkIdSdk := arkid.NewArkID()
  27. var err error
  28. signUser := &md.User{}
  29. arkIdUser := new(arkid.ArkIDUser)
  30. if err = arkIdSdk.SelectFunction("arkid_user_info").
  31. WithArgs(arkid.RequestBody{Token: tokenStr}).
  32. Result(arkIdUser); err != nil {
  33. e.OutErr(c, e.ERR_TOKEN_AUTH, err) //token 不存在
  34. return
  35. }
  36. if arkIdUser.Username == "" {
  37. e.OutErr(c, e.ERR_UNAUTHORIZED, errors.New("Token error"))
  38. return
  39. }
  40. if err = arkIdSdk.SelectFunction("arkid_login").
  41. WithArgs(arkid.RequestBody{Username: arkIdUser.Username, Password: utils.Md5(arkIdUser.Username)}).
  42. Result(arkIdUser); err != nil {
  43. e.OutErr(c, e.ERR_TOKEN_AUTH, err)
  44. return
  45. }
  46. signUser.Ark = arkIdUser
  47. if signUser.Ark == nil {
  48. e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("无效token"))
  49. return
  50. }
  51. signUser.Info, err = db.UserFindByArkidUserName(db.DBs[c.GetString("mid")], arkIdUser.Username)
  52. if err != nil {
  53. e.OutErr(c, e.ERR_TOKEN_AUTH, err)
  54. return
  55. }
  56. if signUser.Info == nil {
  57. e.OutErr(c, e.ERR_TOKEN_AUTH, errors.New("无效token"))
  58. return
  59. }
  60. signUser.Profile, err = db.UserProfileFindByArkID(db.DBs[c.GetString("mid")], utils.IntToStr(arkIdUser.UserID))
  61. if err != nil {
  62. e.OutErr(c, e.ERR_TOKEN_AUTH, err)
  63. return
  64. }
  65. c.Set("user", signUser)
  66. c.Next()
  67. }