【问题标题】:Can CakePHP offer stricter user authentication (continuous throughout session)?CakePHP 能否提供更严格的用户身份验证(在整个会话期间持续)?
【发布时间】:2012-10-02 21:03:36
【问题描述】:

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

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

对于这种不断检查的身份验证,是否有首选方法?本质上,用户应在每次请求时确认访问权限。

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

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

【问题讨论】:

    标签: session cakephp authentication login


    【解决方案1】:

    嗯,你可以使用 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 书籍。你也可以看看this 关于 AuthComponent 的视频。太好了。

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

    顺便说一句。如果您希望 isAuthorized() 函数在每个请求中被调用,则必须在控制器中配置 AuthComponent

    【讨论】:

      【解决方案2】:

      如果Session.timeout 可以在零分钟设置下正常工作,那么您就设置好了。 http://book.cakephp.org/2.0/en/development/sessions.html

      【讨论】:

      • 谢谢,我想我可能错过了这个超时功能中的一些功能,但它实际上并没有达到我想要的效果。我需要每个请求都针对用户数据库检查当前登录(使用哈希/令牌/等)。因此,如果仍然是活跃用户,则保持登录状态
      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      相关资源
      最近更新 更多