2014-11-04 131 views
3

目前,我有我的BaseController,並在每個控制器方法的方法,我需要進行身份驗證我離開我總是具有調用這段代碼的用戶:更好的(普通)AUTH實施

user, err := c.getUser() 
if err != nil { 
     return c.Redirect(UserController.Login) 
} 

剛剛檢查是否

revel.InterceptMethod((*UserController).CheckUser, revel.BEFORE) 

(在init.go) 又增加了一個有效的用戶,以.RenderArgs["user"]

有沒有反正我可以把這個重定向到登錄頁面incl。 auth檢查過濾器/攔截方法,所以我不必重複上述代碼10次? (我在revel v0.9〜0.10開發這個代碼)

我想出了一個解決方案將寫一個模塊/應用程序類似於新的csrf模塊。

編輯2015年4月11日:這個問題問得較早前公佈,請密切關注官方Revel documentation爲隨緣經歷了相當長的一段發展

回答

2

不要讓這些請求到控制器內,如果認證正確,除非已完成。您需要爲此執行Filter。這意味着像

init.go:

revel.Filters = []revel.Filter{ 
    SessionFilter, // Preferably a safe implementation that isn't plaintext cookies etc 
    mypackage.Authenticator 
} 

mypackage.go:

package mypackage 

func Authenticator(c *revel.Controller, fc []revel.Filter) { 
// If authentication found (from session), pass to next Filter in stack 
// If not, redirect to your authentication UI, and pass 
// Or handle other parts of authentication requests... 
// If authentication succeeded, save it to session 

// Otherwise just drop the request (probably log?) 
} 

的細節完全取決於你設置什麼樣的認證了。這裏有一個SSO implementation供您參考。