我已经设置了一个忘记密码的场景,用户提交电子邮件地址,获取发送给他们的临时密码,然后用户单击要发送到用户编辑功能的链接,以将密码更改为他们可以记住的密码。我在 url 中传递临时通行证。
我调试了我能做的事情,它似乎正在结帐,但仍然不允许未登录的用户访问编辑方法。它似乎只授权登录用户(如果他们忘记了密码,因此无法登录,你可以看到我的问题)。
那么,如果临时通道与 url 的 id 参数匹配,您将如何允许访问控制器方法?
is授权功能:
public function isAuthorized($user = null)
{
if (isset($user['role']) && $user['role'] === 1 ) {
return true;
}
if ( $this->request->action === 'edit' ) {
$paramId = (int)$this->request->pass;
$logged_out_user = $this->Users->get($paramId);
if ( password_verify($this->request->query('pass'), $logged_out_user->password) === true ) {
return true;
} else {
return $this->redirect($this->Auth->redirectUrl());
}
}
return parent::isAuthorized($user);
}
示例链接地址:http://localhost/site/users/edit/1?pass=o1eNbs5l7GlHlqvPAmU.