server.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package server1
  2. import (
  3. "github.com/goflyfox/gtoken/gtoken"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/net/ghttp"
  6. )
  7. var TestServerName string
  8. //var TestServerName string = "gtoken"
  9. var server *ghttp.Server
  10. func Start() {
  11. g.Log().Info("########service start...")
  12. g.Cfg().SetPath("../config")
  13. server = g.Server(TestServerName)
  14. initRouter(server)
  15. g.Log().Info("########service finish.")
  16. server.Start()
  17. }
  18. func Stop() {
  19. server.Shutdown()
  20. }
  21. var gfToken *gtoken.GfToken
  22. /*
  23. 统一路由注册
  24. */
  25. func initRouter(s *ghttp.Server) {
  26. s.Group("/", func(group *ghttp.RouterGroup) {
  27. group.Middleware(CORS)
  28. // 调试路由
  29. group.ALL("/hello", func(r *ghttp.Request) {
  30. r.Response.WriteJson(gtoken.Succ("hello"))
  31. })
  32. // 获取登录扩展属性
  33. group.ALL("/system/data", func(r *ghttp.Request) {
  34. r.Response.WriteJson(gfToken.GetTokenData(r).Data)
  35. })
  36. group.ALL("/system/user", func(r *ghttp.Request) {
  37. r.Response.WriteJson(gtoken.Succ("system user"))
  38. })
  39. group.ALL("/user/info", func(r *ghttp.Request) {
  40. r.Response.WriteJson(gtoken.Succ("user info"))
  41. })
  42. group.ALL("/system/user/info", func(r *ghttp.Request) {
  43. r.Response.WriteJson(gtoken.Succ("system user info"))
  44. })
  45. })
  46. loginFunc := Login
  47. // 启动gtoken
  48. gfToken = &gtoken.GfToken{
  49. ServerName: TestServerName,
  50. //Timeout: 10 * 1000,
  51. CacheMode: g.Cfg().GetInt8("gToken.CacheMode"),
  52. CacheKey: g.Cfg().GetString("gToken.CacheKey"),
  53. Timeout: g.Cfg().GetInt("gToken.Timeout"),
  54. MaxRefresh: g.Cfg().GetInt("gToken.MaxRefresh"),
  55. TokenDelimiter: g.Cfg().GetString("gToken.TokenDelimiter"),
  56. EncryptKey: g.Cfg().GetBytes("gToken.EncryptKey"),
  57. AuthFailMsg: g.Cfg().GetString("gToken.AuthFailMsg"),
  58. MultiLogin: g.Config().GetBool("gToken.MultiLogin"),
  59. LoginPath: "/login",
  60. LoginBeforeFunc: loginFunc,
  61. LogoutPath: "/user/logout",
  62. AuthPaths: g.SliceStr{"/user", "/system"}, // 这里是按照前缀拦截,拦截/user /user/list /user/add ...
  63. AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/info"}, // 不拦截路径 /user/info,/system/user/info,/system/user,
  64. GlobalMiddleware: true, // 开启全局拦截
  65. }
  66. err := gfToken.Start()
  67. if err != nil {
  68. panic(err)
  69. }
  70. }
  71. func Login(r *ghttp.Request) (string, interface{}) {
  72. username := r.GetString("username")
  73. passwd := r.GetString("passwd")
  74. if username == "" || passwd == "" {
  75. r.Response.WriteJson(gtoken.Fail("账号或密码错误."))
  76. r.ExitAll()
  77. }
  78. // 唯一标识,扩展参数user data
  79. return username, "1"
  80. }
  81. // 跨域
  82. func CORS(r *ghttp.Request) {
  83. r.Response.CORSDefault()
  84. r.Middleware.Next()
  85. }