使用 Codeigniter 搭建简易论坛系统 (二)

今天完成了简易论坛的用户注册登录和权限验证功能,还是收获蛮多的,至少好好用了 session。下面我就简单的写一下怎么构建论坛的注册登录和简单的权限验证(大致用法会了之后,多角色权限也可以试着做一下)。

项目地址:
https://github.com/Robinson28years/CodeIgniter-learning

验证用户(登录)

首先要创建新的 model controller 还有 view。

然后写 User_model 里的数据获取逻辑

1
2
3
4
5
6
7
8
9
10
11
public function verirf_user()
{
$password = $this->input->post('password');
$hash = $this->db->select('password')
->from('users')
->where('email', $this->input->post('email'))
->get()
->row_array();
$result = password_verify($password, $hash['password']);
return $result;
}

然后到 User 的 Controller 里写视图层到模型层的逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$this->form_validation->set_rules('email', 'Email', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$data['title'] = '登录';
if ($this->form_validation->run() === FALSE) {
$this->load->view('templates/header',$data);
$this->load->view('user/login',$data);
$this->load->view('templates/footer');
}
else {
if ($this->user_model->verirf_user() === FALSE) {
// var_dump($this->user_model->verirf_user());
redirect('/user/login');
}
else {
$email = $this->input->post('email');
$user = $this->user_model->get_user($email);
// var_dump($user);
$this->session->set_userdata($user);
redirect('/forum');
}
}

再结合视图层,一个简单的登录就完成了,需要注意的是,登录成功后需要用session储存用户状态,使用户在访问其他页面时也能保持登录状态。

注销

这个蛮好实现的,把 session 销毁掉就行了

1
2
3
4
5
public function logout()
{
$this->session->sess_destroy();
redirect('forum');
}

注册

其实就是一个表单提交,然后在提交完之后再登录一下。

模型层

1
2
3
4
5
6
7
8
9
10
11
public function register_user()
{
$password = $this->input->post('password');
$data = array(
'name' => $this->input->post('name'),
'email' => $this->input->post('email'),
'password' => password_hash($password, PASSWORD_DEFAULT),
);
return $this->db->insert('users', $data);
}

控制器层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public function register()
{
$this->form_validation->set_rules('name', 'Name', 'required');
$this->form_validation->set_rules('email', 'Email', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$data['title'] = '注册';
if ($this->form_validation->run() === FALSE) {
$this->load->view('templates/header',$data);
$this->load->view('user/register',$data);
$this->load->view('templates/footer');
}
else {
$this->user_model->register_user();
$email = $this->input->post('email');
$user = $this->user_model->get_user($email);
$this->session->set_userdata($user);
redirect('forum');
}
}

权限控制

主要是

  1. 未登录不能发帖
  2. 未登录不能回复
  3. 只能修改自己发的贴
  4. 在前后端都进行控制

前端控制

未登录不能发帖

1
2
3
<?php if ($this->session->email != NULL) { ?>
<a href="<?php echo site_url('forum/create') ?>" class="btn btn-success pull-right" type="button" >创建帖子</a>
<?php } ?>

用 session 进行判断

1
2
3
<?php if ($this->session->id == $thread['user_id']) {?>
<a href="<?php echo site_url('forum/update/'.$thread['id']) ?>" class="btn btn-sm btn-success pull-right" type="button" >修改</a>
<?php } ?>

后端控制

未登录直接跳到主页

1
2
3
if ( $this->session->email == NULL) {
redirect('forum');
}

无法修改不属于自己的帖子

1
2
3
4
5
6
$data['thread'] = $this->forum_model->get_threads($id);
$thread = $data['thread'];
// var_dump($this->session->id);
if ( $this->session->id != $thread['user_id']) {
redirect('forum');
}

最后

Codeigniter 的大致操作都了解了一下,这个框架的学习就暂时到这了,以后如果遇到这个框架相关的项目,还会去继续深入了解。对这个框架有个大概的认识对我以后再接触它和学习其他框架都有帮助。这个框架还是蛮轻巧的,拿来就能用。但轻巧有好也有坏,好处是逻辑简单明了,而且接近原生,MVC 清清楚楚,坏处就是很多操作因为没有好的封装,自己就要写很多步操作。总之,还是个不错的框架,可能 Codeigniter 4.0 会有所改善吧。

明天要开始学怎么开发 APP 了,应该会先从阿里的 WEEX 入手,看学习成本吧,如果太陡峭了可能会尝试其他方法。