2016-09-30 146 views
2

我已經開始開發Web應用程序,其中後端是golang.I m使用beego框架來開發此應用程序。以前我用來在java.Java中編程有過濾功能來過濾請求通過url.I才知道我們能在beego實現它讀取documentation.There後,他們已經給下面的示例代碼如何在golang中添加過濾器beego

var FilterUser = func(ctx *context.Context) { 
    if strings.HasPrefix(ctx.Input.URL(), "/login") { 
     return 
    } 

    _, ok := ctx.Input.Session("uid").(int) 
    if !ok { 
     ctx.Redirect(302, "/login") 
    } 
} 

beego.InsertFilter("/*", beego.BeforeRouter, FilterUser) 

問題是我不知道在哪裏使用這個代碼塊。 ...有人可以幫助我在這個。我感謝您的幫助。謝謝

回答

1

你可以做類似如下:

  • 設定您想要在路由器保護URL和相應的過濾器
  • 創建過濾器功能,這將被路由器調用,檢查用戶

的詳細信息:

// A URL set in router.go 
beego.InsertFilter("/admin/", beego.BeforeRouter, controllers.ProtectAdminPages) 

// A Filter that runs before the controller 
// Filter to protect admin pages 
var ProtectAdminPages = func(ctx *context.Context) { 
    sess, _ := beego.GlobalSessions.SessionStart(ctx.ResponseWriter, ctx.Request) 
    defer sess.SessionRelease(ctx.ResponseWriter) 
    // read the session from the request 
    ses := sess.Get("mysession") 
    if ses != nil { 
     s := ses.(map[string]string) 
     // get the key identifying the user id 
     userId, _ := strconv.Atoi(s["id"]) 
     // a utility function that searches the database 
     // gets the user and checks for admin privileges 
     if !utils.UserIsAdmin(userId) { 
      ctx.Redirect(301, "/some-other-page") 
     } 
    } else { 
     ctx.Redirect(301, "/") 
    } 
} 
+0

謝謝,就是我想要的。我對此有疑問。我們是否需要在登錄之前開始會話...對不起,編程感到很抱歉。感謝 –

+0

您可以在應用程序啓動時啓動會話,所以選擇喲你可以從http://beego.me/docs/mvc/controller/session.md進行設置,並在beego.run()設置會話的設置之前在main中說。 –

+0

謝謝你的幫助Mr.Stef K –