go使用token實現簡單的許可權管理

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

這裡採用的是在header裡設定token進行鑒權,cookie也類似:

基本思路為前端在header裡設定token,後端採用redis等進行儲存,使用中介軟體進行鑒權,登入時設定token。

以下是登入產生token:

設定

if err:=tools.NewAccountSsdbCache(info.Id,token);err!=nil {    c.JSON(403,gin.H{"status":403,"msg":to.String(err),    })return}

方法

func NewAccountSsdbCache(userid int64,val string)(err error){ssdb,err:=common.NewSsdbClient()if err!=nil {return err}defer ssdb.Close()if err:=ssdb.Set(MakeSSdbCacheKey(userid),val,60);err!=nil{return err}return nil}

中介軟體鑒權

api:=rounter.Group("/api")api.Use(middleware.AccessTokenMiddleware())

方法

func AccessTokenMiddleware() gin.HandlerFunc {return func(c *gin.Context) {authtoken:=c.Request.Header.Get("AuthToken")if authtoken==""{// 沒有提供許可權tokenc.JSON(401, gin.H{"status": 401,"msg":    "header缺少authtoken!",})c.Abort()return}else {auth, err := DecodeAuthV1(authtoken)if err != nil {// 許可權資訊不完整c.JSON(401,gin.H{"status":401,"msg":"許可權資訊不完整!",})c.Abort()return}account := &model.Account{}o := common.NewOrm()o.QueryTable("account").Filter("id", auth["id"]).One(account, "id", "account_token", "auth_token")if account.Id == 0 || account.AccountToken != auth["token"] || account.AuthToken != authtoken {// 許可權資訊偽造或者已經失效c.JSON(401, gin.H{"status": 401,"msg":   "許可權資訊已經失效,請重新登入",})c.Abort()return}ssdb,err:=common.NewSsdbClient()if err != nil {c.JSON(401, gin.H{"status": 401,"msg":   "許可權擷取失敗,嘗試重新操作",})c.Abort()return}defer ssdb.Close()val,err:=ssdb.Get("OG"+to.String(account.Id))if err!=nil{c.JSON(401, gin.H{"status": 401,"msg":   "許可權資訊擷取失敗,請重試!",})c.Abort()return}if authtoken!=to.String(val) {c.JSON(401, gin.H{"status": 401,"msg":   "許可權資訊不一致!",})c.Abort()return}}c.Next()}}

以上就完成了簡單的登入產生token和鑒權的過程!覺得有用點個推薦吧!⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

1212 次點擊  ∙  2 贊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.