main.go 2.9 KB

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