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

这是解决您问题的方法

  1. 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
    }
}

  1. 将您的新过滤器添加到过滤器 App / Filters.php 类中,以使其正常工作
public $aliases = [
        'csrf'          => \CodeIgniter\Filters\CSRF::class,'toolbar'       => \CodeIgniter\Filters\DebugToolbar::class,'honeypot'      => \CodeIgniter\Filters\Honeypot::class,'auth'          => \App\Filters\Auth::class,];
  1. 在您的 Routes.php 中,您可以使用该过滤器来确定要使用的路由,然后再转到所需的路由。

单条路线

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

用于路线组

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

以便该过滤器将在组内所有单个路由运行之前执行。

我希望这对您有帮助

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...