CodeIgniter 仅允许在登录时访问某些控制器

Posted

技术标签:

【中文标题】CodeIgniter 仅允许在登录时访问某些控制器【英文标题】:CodeIgniter only allow access to certain controllers when logged in 【发布时间】:2011-01-02 12:16:04 【问题描述】:

我有一些 CodeIgniter 控制器只能由登录的用户访问(即 $this->session->userdata('username') 不为空)。如果未经身份验证的人试图访问所述控制器,他们应该收到:

header('location: /auth/login');

必须有比放置一个更好的方法来做到这一点

if (!$this->session->userdata('username'))
    header('location: /auth/login');
else

    [rest of function]

在控制器中的每个函数前面...

我知道 DX_Auth 具有类似的功能,但我没有使用身份验证插件,也不愿意这样做。

谢谢! 马拉

【问题讨论】:

【参考方案1】:

在创建类时进行用户登录检查,因此无论用户访问什么功能,它都会检查会话变量并在失败时重定向到登录页面:

function className()

    parent::Controller();
    if(!$this->session->userdata('username')) header('location: /auth/login');

这就是调用__constructor 的方式,或者它在您创建controllers/models 时在codeigniter 中等效,或者至少我是这么理解的!

【讨论】:

啊,伙计:)我没想过要实例化这些东西! 是的,它很有魅力,非常感谢!对于仅“限制”特定功能的控制器,是否也可以将其放入构造函数中?或者对于那些我需要在函数前面添加一个 if/header 块?

以上是关于CodeIgniter 仅允许在登录时访问某些控制器的主要内容,如果未能解决你的问题,请参考以下文章

仅允许某些用户访问某些文件夹/文件

登录验证在CodeIgniter中不起作用

仅允许经过身份验证的用户访问 API 路由

没有登录会话,任何人都无法访问 codeigniter 4 中的控制器

CodeIgniter 仅在某些页面使用 CSRF 保护

您请求的操作是不允许的。代码点火器