我使用revel实现一个简单的拦截器,他唯一的责任是确保用户经过身份验证,如果没有,则重定向到auth页面。
有什么影响func setUser(c *revel.Controller) revel.Result {
switch interface{}(c.Type).(type) {
case controllers.Auth:
return nil
}
return c.Redirect(controllers.Auth.Index)
}
永远不会遇到类型案例controllers.Auth
,从而导致无限循环。我假设有一些显而易见的东西我不知道,但是当我弄清楚如何通过gdb运行一个狂欢应用来尝试调试这个时,我想问这里。
答案 0 :(得分:2)
我相信你的开关你需要一个基础案例。你无限期地进入它,因为c的类型不是controllers.Auth
而你没有其他情况。但是,在您的使用案例中,没有理由使用开关,我个人不会。它是二进制文件,因此只需在controllers.Auth
上键入断言,如果不是,则重定向。
func setUser(c *revel.Controller) revel.Result {
if _, ok := c.(controllers.Auth); ok {
return c.Redirect(controllers.Auth.Index)
}
return nil
}