2014-11-04 129 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供您参考。