登录后如何屏蔽登录页面?

问题描述 投票:0回答:2

我正在学习 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'
                ]
            ]

问题是,如果我更改身份验证以检查是否有会话并删除异常“登录”,我会在登录和应用程序/仪表板中收到错误,我在这里做错了什么?

我已经尝试更改身份验证过滤器以检查会话是否存在,但总是给我错误太多重定向

php authentication codeigniter
2个回答
0
投票

您可以检查您在此处创建的会话变量是否存在。如果他们这样做,你将返回一个错误。还有其他方法,但这是最简单的。


0
投票

要解决此问题,您可以修改身份验证过滤器,仅在用户未登录时排除“登录”路由。具体操作方法如下:

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'));
    }

我希望它对你有用,

谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.