CakePHP可以提供更严格的用户身份验证(在整个会话期间连续)吗?

时间:2012-10-12 04:49:06

标签: session cakephp authentication login

我正在尝试为CakePHP服务创建合适的身份验证检查。目前看来,用户会话最初是在登录期间创建的,但在单个会话期间从未检查过。

例如。重命名用户名,更改用户数据库条目中的密码或ID对会话没有影响。

对于这种经常检查的身份验证,是否有首选方法?基本上,用户应该在每次请求时都被确认访问。

我当前的解决方案将涉及扩展AuthComponent并存储用户数据的散列(包括加密密码),并在每次请求时进行检查。我还考虑将会话ID存储在同一个令牌中,但注意到CakePHP甚至没有使用session_start()函数。

此功能对我来说似乎是必要的,我认为其他人也需要这样的解决方案。我还没有找到类似于我需要的Cake文档或社区解决方案。

2 个答案:

答案 0 :(得分:2)

好吧,您可以使用 AuthComponent 中的isAuthorized()功能。每次请求都会调用它。

public function isAuthorized($user){
    return true; //allow the user to see the page
}

您可以debug($user)查看实际数据,如果您想从数据库中获取“新”信息,您可以随时获取这些信息:

public function isAuthorized($user){
    $current_user_from_database = $this->User->findById($user['id']);
    if($current_user_from_database['User']['username'] != $user['username']){
         $this->Session->setFlash('You\'ve changed the username. Please, login again.');
         $this->redirect($this->Auth->logout);
         return false;
    }
    return true;
}

查看API以获取更多信息以及PDF书籍。您也可以查看有关AuthComponent的this视频。太棒了。

如果您需要更多信息或帮助,请随时提出。

顺便说一下。如果希望每次请求都调用isAuthorized()函数,则必须在Controller中配置 AuthComponent

答案 1 :(得分:0)

如果Session.timeout在零分钟设置下正常工作,则您已设置。 http://book.cakephp.org/2.0/en/development/sessions.html