我正在CakePHP 3.2上开发一个Web应用程序,其中用户身份验证分为两个步骤。
每个用户都有用户名,密码,PIN以及其他字段。
第1步: users / login - 输入用户名和密码。
第2步: users / pin_authorize - 如果第1步成功,则输入pin。
每次用户处于非活动状态大约30分钟时,我希望将用户重定向到pin_authorize页面而不是主登录页面。只有当用户插入正确的PIN时,用户才能访问其他页面。
// AppController
public function initialize() {
parent::initialize();
$this->loadComponent('Auth',[
'loginAction' => [
'plugin' => 'Admin',
'controller' => 'Users',
'action' => 'login'
],
'loginRedirect' => [
'plugin' => 'Admin',
'controller' => 'Users',
'action' => 'pinAuthorization'
],
'logoutRedirect' => [
'plugin' => 'Admin',
...
]
]);
}
// UsersController
public function pinAuthorization() {
if (!$this->Auth->user('id')) {
return $this->redirect([
'plugin' => 'Admin',
'controller' => 'Users',
'action' => 'login'
]);
}
if ($this->request->is('post')) {
if ($this->Users->pinAuthorize($this->request->data['pin'])) {
$this->request->session()->write("PinAuthStatus", 1);
return $this->redirect([
'plugin' => 'Admin',
'controller' => 'Users',
'action' => 'dashboard'
]);
}
$this->Flash->error(__('Invalid PIN.'));
}
$this->viewBuilder()->layout(false);
}
任何帮助都将受到高度赞赏。谢谢!
答案 0 :(得分:1)
我建议在用户成功cookie后30分钟到期后创建logged in,并在每次验证isAuthorized时更新。然后,如果cookie已过期且会话仍然存在,您可以在isAuthorized中对引脚授权页面执行redirect。