无法重定向__construct函数-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中有一个类名过滤器,你可以创建用于身份验证的类,你可以阅读文档了解更多详细信息。

这就是问题的解决方案

  1. App/Filters文件夹内创建文件Auth.php
<?php
namespace AppFilters;
use CodeIgniterHTTPRequestInterface;
use CodeIgniterHTTPResponseInterface;
use CodeIgniterFiltersFilterInterface;
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
}
}
  1. 将您的新过滤器添加到过滤器App/Config/filters.php类中以使其工作
public $aliases = [
'csrf'          => CodeIgniterFiltersCSRF::class,
'toolbar'       => CodeIgniterFiltersDebugToolbar::class,
'honeypot'      => CodeIgniterFiltersHoneypot::class,
'auth'          => AppFiltersAuth::class,
];
  1. Routes.phpu中,您可以使用该过滤器来指定使用的路由。在转到您想要的路由之前运行该过滤器

对于单路

$routes->get('examplefunction', 'ControllerName::examplefunction', ['filter' => 'auth']);

对于路由组

$routes->group('', ['filter' => 'auth'], function ($routes) {
$routes->get('/', 'ControllerName::examplefunction');
$routes->get('examplefunction2', 'ControllerName::examplefunction2');
};

使得过滤器将在组内的所有单个路由运行之前执行。

我希望这能帮助你

相关内容

  • 没有找到相关文章

最新更新