使用摘要身份验证的 CakePHP:注销后无需密码即可登录成功


CakePHP Using Digest Authenticate: login succeeds without password after logout

我正在使用CakePHP来创建一个简单的应用程序,我决定使用摘要身份验证,因为我无法获得SSL证书,也不希望通过表单以纯文本形式发布密码。

所以一切都运行良好,登录,注销,一切都根据登录状态工作。但是,当我再次登录时注销后,它会自动登录,而无需输入密码或用户名。这使得在我注销一段时间(一天左右?)之前无法更改帐户,并且它再次要求输入用户名和密码。如果我使用的是公共计算机,并且不希望下一个人在没有密码提示的情况下随意登录我的帐户,这也是一种安全风险。

我的问题,Cake 中是否有我缺少的设置,或者这是我的浏览器记住我的凭据并在应用程序要求它们时提供它们。我觉得注销应该清除凭据。我已经在Chrome和Firefox中尝试过相同的结果,我也没有选中任何"记住我的密码"框。

我的身份验证组件提示:

public $components = array('Session', 'RequestHandler', 'Auth' => array(
            'authenticate' => array('Digest'),
            'loginRedirect' => array('controller' => 'posts', 'action' => 'index'),
            'logoutRedirect' => array('controller' => 'posts', 'action' => 'index'),
        ));

登录功能:

public function login() {
//No longer Auth Magic
 if ($this->Auth->login()) {
   return $this->redirect(array('controller' => 'posts', 'action' => 'index'));
 } else {
   $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
 }
   $this->autoRender = false;
}

注销功能:

public function logout() {
   $this->Auth->logout();
   return $this->redirect($this->Auth->logout());
}

那么有什么想法吗?我唯一应该提到的是,我必须手动包含 DigestAuthenticate.php 为了使用 DigestAuthenticate::p assword 函数,Cake 抛出了一些错误,说 DigestAuthenticate 类不存在。请参阅此处的问题:http://ask.cakephp.org/questions/view/digestauthenticate

根据CakePHP书[这里]:

注销使用摘要或基本身份验证登录的用户是 很难为所有客户完成。大多数浏览器将保留 凭据在它们仍处于打开状态的持续时间内。有些客户端可以是 通过发送 401 状态代码强制注销。更改 身份验证领域是适用于某些客户端的另一种解决方案。

这可能不是你想听到的,但是...