【问题标题】:Wont redirect on __constrruct function - Codeigniter 4不会在 __constrruct 函数上重定向 - Codeigniter 4
【发布时间】:2020-08-25 13:56:43
【问题描述】:

所以我的控制器上有这个功能来检查用户是否登录,但是当用户没有登录时它不会重定向到登录页面

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 codeigniter-4


【解决方案1】:

在 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/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,
    ];
  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');
};

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

希望对你有帮助

【讨论】:

  • 这完全是正确的答案。对于登录检查和重定向,以防在没有登录的情况下阻止访问,您应该真正使用过滤器。同样在您的控制器中,您不应该真正使用 __construct 魔术方法,而是使用 BaseController 中已经存在的 __init 方法。
猜你喜欢
  • 2021-01-29
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 2013-04-09
  • 2020-03-01
  • 2012-11-17
相关资源
最近更新 更多