login_controller.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package controller
  2. import (
  3. "f1-game/internal/code"
  4. "f1-game/internal/component/sdk"
  5. sdkFacade "f1-game/internal/component/sdk/define/facade"
  6. "f1-game/internal/data"
  7. "f1-game/internal/extend/token"
  8. nameKey "f1-game/internal/name/key"
  9. cstring "github.com/cherry-game/cherry/extend/string"
  10. clog "github.com/cherry-game/cherry/logger"
  11. cgin "github.com/cherry-game/components/gin"
  12. )
  13. type LoginController struct {
  14. cgin.BaseController
  15. }
  16. func (p *LoginController) Init() {
  17. allowRegister := p.App.Settings().GetBool("allow_register", false)
  18. if allowRegister {
  19. p.Any("/login", p.login)
  20. }
  21. }
  22. // login 根据pid获取SdkConfig,与第三方进行帐号登录效验
  23. // http://127.0.0.1/login?pid=2188001&account=test1&password=test1
  24. func (p *LoginController) login(c *cgin.Context) {
  25. pid := c.GetInt32(nameKey.PID, 0, true)
  26. if pid < 1 {
  27. clog.Warnf("if pid < 1 {. params=%s", c.GetParams())
  28. code.JSONResult(c, code.PIDError)
  29. return
  30. }
  31. sdkRow := data.SDK.Get(pid)
  32. if sdkRow == nil {
  33. clog.Warnf("if sdkConfig == nil {. params=%s", c.GetParams())
  34. code.JSONResult(c, code.AccountLoginSDKNotFound)
  35. return
  36. }
  37. sdkInvoke, err := sdk.GetInvoke(sdkRow.SdkID)
  38. if err != nil {
  39. clog.Warnf("[pid = %d] get invoke error. params=%s", pid, c.GetParams())
  40. code.JSONResult(c, code.PIDError)
  41. return
  42. }
  43. paramsMap := c.GetParams(true)
  44. paramsMap[nameKey.PID] = cstring.ToString(pid)
  45. // invoke login
  46. sdkInvoke.Login(sdkRow, paramsMap, func(statusCode int32, paramsMap sdkFacade.ParamsMap, error ...error) {
  47. if code.IsFail(statusCode) {
  48. clog.Warnf("login validate fail. code = %d, params = %s", statusCode, c.GetParams())
  49. if len(error) > 0 {
  50. clog.Warnf("code = %d, error = %s", statusCode, error[0])
  51. }
  52. code.JSONResult(c, statusCode)
  53. return
  54. }
  55. if paramsMap == nil {
  56. clog.Warnf("callback paramsMap is nil. params= %s", c.GetParams())
  57. code.JSONResult(c, code.AccountLoginResponseError)
  58. return
  59. }
  60. openID := paramsMap.Get(nameKey.OpenID)
  61. if cstring.IsBlank(openID) {
  62. clog.Warnf("callback result map not found `open_id`. paramsMap = %v", paramsMap)
  63. code.JSONResult(c, code.AccountLoginResponseError)
  64. return
  65. }
  66. base64Token := token.New(pid, openID, sdkRow.Salt).ToBase64()
  67. code.JSONResult(c, code.OK, base64Token)
  68. })
  69. }