在控制器上键入开关

时间:2016-01-18 20:46:26

标签: go revel

我使用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运行一个狂欢应用来尝试调试这个时,我想问这里。

1 个答案:

答案 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
}