Spa*_*rky 4 php authentication codeigniter codeigniter-2 ion-auth
我已经正确安装了Ion Auth并在我的服务器上运行.我也有默认的CodeIgniter 2 "新闻"教程在同一个CI安装中工作.我只是在玩耍并且对使用身份验证系统"封闭"或保护整个应用程序的正确方法感到好奇.
对于这个问题,让我们使用CI附带的"新闻"教程.
index()
在我的news.php
控制器中的函数内部,我添加了条件代码来检查用户是否已登录.如果没有,则用户刚刚进入登录屏幕.
public function index() {
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
if ($this->ion_auth->logged_in()) {
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
} else {
redirect('auth/login', 'refresh');
}
}
Run Code Online (Sandbox Code Playgroud)
我可以看到它的工作原理,但直接的缺点是控制器中的每个函数也必须使用类似的条件逻辑进行修改,以保护所有其他页面视图.例如 - 检查登录,显示页面,否则转到登录页面......一遍又一遍.
这是应该做的吗?
如果一个应用程序已经构建并正在运行并且只是想保护它们怎么办?添加条件逻辑以检查控制器内每个页面视图的登录状态似乎不必要地冗长.
可以在一个地方保护整个应用程序(所有视图)以最小化代码修改吗?如果是这样,怎么样?
Bre*_*dan 10
为了保护整个控制器,您可以将auth检查放入__construct()
eric.itzhak中提到的呼叫中.
要保护整个应用程序,可以扩展CI_Controller类,将auth放在该文件的构造函数中,最后通过MY_Controller而不是CI_Controller在每个控制器中进行扩展.
代码示例:
/* File: application/core/MY_Controller.php */
class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
if ( ! $this->ion_auth->logged_in())
{
redirect('auth/login');
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在每个控制器中(注意MY_Controller,而不是CI_Controller):
class Controller_name extends MY_Controller
{
function __construct()
{
parent::__construct();
}
// rest of controller methods
}
Run Code Online (Sandbox Code Playgroud)
这些代码示例假设您是自动加载(您可能也是)离子auth库.如果没有,请MY_Controller
根据需要将库加载到文件中.
这种方法有两个优点:
归档时间: |
|
查看次数: |
2930 次 |
最近记录: |