我正在学习 codeigniter 4,我试图在用户登录后获取登录页面块,但我收到错误太多重定向,我不知道如何修复它
我的登录控制器:
public function login()
{
$validated = $this->validate([
'email' => 'required|valid_email',
'password' => 'required',
],[
'email'=> [
'required' => 'E-mail required',
'valid_email' => 'E-mail not valid',
],
'password'=> [
'required'=> 'Password required',
]
]);
if (!$validated) {
return redirect()->route('login')->with('errors', $this->validator->getErrors());
} else {
$email = $this->request->getPost('email');
$password = $this->request->getPost('password');
}
$usersModel = new UsersModel();
$dataUser = $usersModel->getByEmail($email);
if (count($dataUser) > 0) {
$hashUser = $dataUser['users_password'];
if (password_verify($password, $hashUser)) {
unset($hashUser);
session()->set('isLoggedIn', true);
session()->set('nome', $dataUser['users_name']);
return redirect()->to(base_url('app/dashboard'));
}
}
}
public function logout()
{
session()->destroy();
return redirect()->to(base_url('login'));
}
我的身份验证过滤器:
if ((bool)session()->isLoggedIn != true) {
return redirect()->to(base_url('login'));
}
在配置/过滤器中我添加过滤器全局变量
'before' => [
'auth'=> [
'except' => [
'login',
'/',
'search/*',
'post/*',
'sobre',
'contato'
]
]
问题是,如果我更改身份验证以检查是否有会话并删除异常“登录”,我会在登录和应用程序/仪表板中收到错误,我在这里做错了什么?
我已经尝试更改身份验证过滤器以检查会话是否存在,但总是给我错误太多重定向
您可以检查您在此处创建的会话变量是否存在。如果他们这样做,你将返回一个错误。还有其他方法,但这是最简单的。
要解决此问题,您可以修改身份验证过滤器,仅在用户未登录时排除“登录”路由。具体操作方法如下:
if ((bool)session()->isLoggedIn != true && service('router')->controllerName() !== 'LoginController') {
return redirect()->to(base_url('login'));
}
'before' => [
'auth'=> [
'except' => [
'/',
'search/*',
'post/*',
'sobre',
'contato'
]
]
]
如果不起作用,请尝试第二种方法 在登录表单页面添加重定向
// Check if the user is already logged in
if (session()->isLoggedIn) {
return redirect()->to(base_url('app/dashboard'));
}
我希望它对你有用,
谢谢!