Model view controller 要求用户登录的MVC页面

Model view controller 要求用户登录的MVC页面,model-view-controller,login,security,Model View Controller,Login,Security,我正在研究一个小小的MVC框架,我想知道什么是“最好的方法”,这样安全的页面/控制器就可以确保用户登录(这样就可以自动重定向到登录页面——或者其他地方——如果没有的话)。显然,有很多方法可以做到这一点,但我想知道什么解决方案是最常见的或被认为是最佳实践。我有一些想法: 在控制器操作方法的开头显式调用user->isLoggedIn()?(似乎太容易忘记,在事故中留下不安全的重要一页) 使您的控制器扩展始终检查构造函数中登录名的secureController 当请求安全信息时,是否在模型中进行

我正在研究一个小小的MVC框架,我想知道什么是“最好的方法”,这样安全的页面/控制器就可以确保用户登录(这样就可以自动重定向到登录页面——或者其他地方——如果没有的话)。显然,有很多方法可以做到这一点,但我想知道什么解决方案是最常见的或被认为是最佳实践。我有一些想法:

  • 在控制器操作方法的开头显式调用
    user->isLoggedIn()
    ?(似乎太容易忘记,在事故中留下不安全的重要一页)
  • 使您的控制器扩展始终检查构造函数中登录名的
    secureController
  • 当请求安全信息时,是否在模型中进行此检查?(似乎会有多余的电话)
  • 完全是别的吗

注意:我使用的是PHP,但问题与语言无关。

ASP.Net MVC通过需要授权的控制器类上的[Authorize]属性很好地实现了这一点。

这不是唯一的方法,但是

所有客户端请求都会转到FilterManager,后者根据请求的详细信息构建FilterChain。在FilterChain中,如果资源需要登录状态,而客户端未登录,则可以重定向请求。原始请求可以保存并重定向到登录页面,允许从原始请求继续(这是可选的)

这是一种J2EE设计模式,但是一旦你有了这个想法,你就可以用任何语言实现它。在这种情况下,“过滤器”之一是“身份验证过滤器”。有关该想法的详细信息,请参见(Java)


这样做的好处是,所有页面都将其逻辑集中在FilterManager中,因此页面只需调用FilterManager即可。此外,您还可以添加调试过滤器/日志过滤器等,以帮助维护/开发代码。

这也可以在每个操作的基础上应用。我非常喜欢这个想法。在这一点上,比我想在我的(相当小的)框架中加入的内容多一点,但我肯定会在以后继续研究它。