<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天和大家分享一下使用gtoken替換jwt實現sso登入的經驗,為了讓大家更好的理解會帶大家讀一下重點的原始碼。
首先說明一個jwt存在的問題,也就是要替換jwt的原因:
gtoken的請求流程和jwt的基本一致。
gtoken的優勢就是能幫助我們解決jwt的問題,另外還提供好用的特性,比如:
gtoken v1.5.0
全面適配GoFrame v2.0.0 ; GoFrame v1.X.X 請使用GfToken v1.4.X相關版本TIPS:下面我的演示demo和原始碼閱讀都是基於v1.4.x版本的。
下面的演示demo可以複製到本地main.go檔案中執行,更新依賴的時候千萬注意版本。
重點說一下踩的坑:
Login方法會要求我們返回兩個值:
第一個值對應userKey,後續我們可以根據userKey獲得token 第二個值對應data,是interface{}型別,我們可以在這裡定義例如userid、username等資料。
先有這個概念即可,後面會帶大家讀原始碼。
package main import ( "github.com/goflyfox/gtoken/gtoken" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" "github.com/gogf/gf/os/glog" ) var TestServerName string //var TestServerName string = "gtoken" func main() { glog.Info("########service start...") g.Cfg().SetPath("example/sample") s := g.Server(TestServerName) initRouter(s) glog.Info("########service finish.") s.Run() } var gfToken *gtoken.GfToken /* 統一路由註冊 */ func initRouter(s *ghttp.Server) { // 不認證介面 s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(CORS) // 偵錯路由 group.ALL("/hello", func(r *ghttp.Request) { r.Response.WriteJson(gtoken.Succ("hello")) }) }) // 認證介面 loginFunc := Login // 啟動gtoken gfToken := >oken.GfToken{ ServerName: TestServerName, LoginPath: "/login", LoginBeforeFunc: loginFunc, LogoutPath: "/user/logout", AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/info"}, // 不攔截路徑 /user/info,/system/user/info,/system/user, MultiLogin: g.Config().GetBool("gToken.MultiLogin"), } s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(CORS) gfToken.Middleware(group) group.ALL("/system/user", func(r *ghttp.Request) { r.Response.WriteJson(gtoken.Succ("system user")) }) group.ALL("/user/data", func(r *ghttp.Request) { r.Response.WriteJson(gfToken.GetTokenData(r)) }) group.ALL("/user/info", func(r *ghttp.Request) { r.Response.WriteJson(gtoken.Succ("user info")) }) group.ALL("/system/user/info", func(r *ghttp.Request) { r.Response.WriteJson(gtoken.Succ("system user info")) }) }) // 啟動gtoken gfAdminToken := >oken.GfToken{ ServerName: TestServerName, //Timeout: 10 * 1000, LoginPath: "/login", LoginBeforeFunc: loginFunc, LogoutPath: "/user/logout", AuthExcludePaths: g.SliceStr{"/admin/user/info", "/admin/system/user/info"}, // 不攔截路徑 /user/info,/system/user/info,/system/user, MultiLogin: g.Config().GetBool("gToken.MultiLogin"), } s.Group("/admin", func(group *ghttp.RouterGroup) { group.Middleware(CORS) gfAdminToken.Middleware(group) group.ALL("/system/user", func(r *ghttp.Request) { r.Response.WriteJson(gtoken.Succ("system user")) }) group.ALL("/user/info", func(r *ghttp.Request) { r.Response.WriteJson(gtoken.Succ("user info")) }) group.ALL("/system/user/info", func(r *ghttp.Request) { r.Response.WriteJson(gtoken.Succ("system user info")) }) }) } func Login(r *ghttp.Request) (string, interface{}) { username := r.GetString("username") passwd := r.GetString("passwd") if username == "" || passwd == "" { r.Response.WriteJson(gtoken.Fail("賬號或密碼錯誤.")) r.ExitAll() } return username, "1" /** 返回的第一個引數對應:userKey 返回的第二個引數對應:data { "code": 0, "msg": "success", "data": { "createTime": 1652838582190, "data": "1", "refreshTime": 1653270582190, "userKey": "王中陽", "uuid": "ac75676efeb906f9959cf35f779a1d38" } } */ } // 跨域 func CORS(r *ghttp.Request) { r.Response.CORSDefault() r.Middleware.Next() }
啟動專案:
存取不認證介面:返回成功
未登入時存取認證介面:返回錯誤
請求登入介面:返回token
攜帶token再次存取認證介面:返回成功
以上就跑通了主體流程,就是這麼簡單。
到此這篇關於gtoken替換jwt實現sso登入的文章就介紹到這了,更多相關gtoken實現sso登入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45