codeigniter - 不会在 __constrruct 函数上重定向 - Codeigniter 4
问题描述
所以我的控制器上有这个功能来检查用户是否登录,但是当用户没有登录时它不会重定向到登录页面
public function __construct()
{
if(session()->get('logged_in') !== true)
{
redirect('login');
}
}
有人对此有解决方案吗?还是我应该对每个功能进行会话检查?喜欢
public function examplefunction()
{
if(session()->get('logged_in') !== true)
{
redirect('login');
}
//run other codes
}
解决方案
在 codeigniter 4 中有一个类名过滤器,您可以创建用于身份验证的类,您可以阅读文档以获取更多详细信息。
这是您问题的解决方案
- 在App/Filters文件夹中创建文件Auth.php
<?php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;
class Auth implements FilterInterface
{
public function before(RequestInterface $request)
{
if(session()->get('logged_in') !== true)
{
return redirect()->to('login');
}
}
//--------------------------------------------------------------------
public function after(RequestInterface $request, ResponseInterface $response)
{
// Do something here
}
}
- 在过滤器App/Config/Filters.php类中添加您的新过滤器以使其工作
public $aliases = [
'csrf' => \CodeIgniter\Filters\CSRF::class,
'toolbar' => \CodeIgniter\Filters\DebugToolbar::class,
'honeypot' => \CodeIgniter\Filters\Honeypot::class,
'auth' => \App\Filters\Auth::class,
];
- 在您的Routes.php中,您可以使用该过滤器来指定使用哪个路由运行该过滤器,然后再转到您想要的路线。
对于单路
$routes->get('examplefunction', 'ControllerName::examplefunction', ['filter' => 'auth']);
对于路线组
$routes->group('', ['filter' => 'auth'], function ($routes) {
$routes->get('/', 'ControllerName::examplefunction');
$routes->get('examplefunction2', 'ControllerName::examplefunction2');
};
这样过滤器将在组内的所有单个路由运行之前执行。
我希望这对你有帮助
推荐阅读
- node.js - 为什么我在开始使用 React 时遇到错误?
- php - 如何在没有 html 标签的情况下获取 wordpress 页面内容?
- php - 如何使用 guzzle promise 提高响应时间?
- kubernetes - K8s 大使没有 FilterPolicy 的处理程序
- git - 来自现有存储库的 git init new
- php - PHP sftp - 我可以获得下载/上传速度吗?
- python - 如何使用批处理生成器为 python 中的音频信号生成噪声数据?
- javascript - 在 Facebook 等按钮中设置头像图像的样式?
- discord.js - 邀请命令离开 discord.js
- python - 当预测值是连续的而实际值是离散的时,如何找到准确性?