我目前正在开发 PHP Laminas 框架应用程序,并且遇到了路由问题。
情况是这样的:当用户尝试登录时,如果密码已过期,他们会自动重定向到“
/password-reset
”路线。用户成功更新密码后,他们应该被重定向到“/login
”路线。但是,即使登录表单正确显示,URL 仍为“/password-reset
”。
如何解决这个路由问题?
代码
routes.php
'password-reset' => [
'type' => 'Literal',
'priority' => 9999,
'may_terminate' => true,
'options' => [
'route' => '/password-reset',
'defaults' => [
'controller' => 'Authentication\Controller\Authentication',
'action' => 'password-reset'
]
]
],
密码过期检查并重定向至密码重置页面
loginAction()
if ($passwordExpiryDate['passwordExpiryDate'] && $currentDate >= $passwordExpiryDate['passwordExpiryDate']) {
return $this->redirect()->toRoute('password-reset');
} else {
// login
$learner = $service->login($data['identity'], $data['password']);
}
密码重置操作
// get user email
$userEmail = $post['email'];
$learnerService = $this->learnerService();
$userId = $learnerService->getUserIdByEmail($userEmail);
// validate form
$data = $form->validate($post);
// change password and save
$user = $learnerService->changePassword($userId['userId'], $data);
// success
$message['success'] = $this->translate('Password reset successfully. Please return to the login page to continue.');
if (!$request->isXmlHttpRequest()) {
$this->flashMessenger()->addSuccessMessage($message['success']);
}
return $this->redirect()->toRoute('login');
login
的路线定义是什么样的?
(我对拉米纳斯一无所知,但也许这些额外的信息会帮助其他人解决你的问题。)