Laravel搭建博客 (添加用户)

文章和评论都已经有了,可以添加用户来控制对文章和评论的管理,主要涉及到用户认证、登陆注册等常用功能。

用户功能

Laravel中自带了用户表以及Migrate,直接使用它,用户有‘用户名’、‘密码’、‘邮箱’三个主要字段。

1.添加Post/Comment与User的关联

之前的Blog中并没有任何用户功能,现在要添加User,所以首先要将User与Post以及Comment进行关联,在Post以及Comment的Schema::create中添加$table->interger('user_id'),之后执行php artisan migrate:refresh来重新设置数据库,现在Comment以及Post表中的数据都被清除了。同样要记得在Comment.php以及Post.php中添加user函数并且在里面指定belongsTo的多对一关系,还要在User.php中指定与Post和Comment的一对多关系。

2.添加注册用户的路由和视图

首先添加注册路由:Route::get('/register', 'RegistrationController@create');,然后添加控制器:php artisan make:controller RegistrationController,接下来在RegistrationController中添加create方法:

public function create(){
return view('sessions.create');
}

创建视图sessions/create.blade.php

@extends ('layouts.master')

@section('content')
<div class="col-sm-8">
<h1>Register</h1>
</div>
@endsection

之后跳转到'/register'页面,可以看到相应的内容,然后添加表单、并让Form的action指向'/register',添加Post的register到路由:Route::post('/register', 'RegistrationController@store');,然后在store中处理注册请求。

public function store(){
$this->validate(request(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required'
]);

$user = User::create(request()->all());

auth()->login($user);

return redirect('/');
}

store中现在做了4件事:第一是验证表单,第二是创建用户,第三是使用auth()->login()让用户登录,第四是重定向到'/'页面。

3.确认密码以及加密密码

在注册的时候,密码需要确认输入一次,这样会使密码输错的几率减小。首先在表单中添加一行‘密码确认’:

<div class="form-group">
<label for="password">Password:</label>
<input type="password" class="form-control" id="password" name="password">
</div>

<div class="form-group">
<label for="password_confirmation">Password Confirmation:</label>
<input type="password" class="form-control" id="password_confirmation" name="password_confirmation">
</div>

然后把之前在store函数中的'password' => 'required'改为'password' => 'required|confirmed',Laravel将会自动匹配两个输入框中的密码,如果不同,会把错误写到'$errors'变量中。

前面的步骤与添加文章或是评论没有太大区别,但是在注册用户时,用户的密码直接存储是非常不安全的,一般情况下,用户输入的密码需要加密后再存储,否则很容易被窃取;所以在存储密码之前,需要做加密工作,Laravel的加密很简单,使用bcrypt即可,所以对密码进行:'password' => bcrypt(request('password'));,可以参考Laravel——加密与解密

4.登录登出

完成注册之后,就是要实现登录与登出功能,在注册的时候同时使用auth->login()完成了登录工作,这是Laravel的Auth模块所实现的,登出功能使用auth->logout()同样可以实现。登录页面显示可以参考注册页面来完成,登出页面与功能同样如此:首先创建一个控制器,比如SessionsController,由这个控制器来控制登录、登出;然后添加相应的路由即可。可以在导航的右上方添加一个标志,比如如果用户登录则显示用户名,否则什么都不显示,来测试登录与登出功能。

5.只有注册用户才能添加文章

之前使用'/posts/create'路由来添加文章,现在有了用户功能,应该指定只有用户可以添加文章,给PostsController添加一个构造函数:

public function __construct(){
$this->middleware('auth')->except(['index','show']);
}

在这里指定除了indexshow功能以外,其他的功能都需要通过auth中间件,也就是登录以后才能使用,对于没有登录的用户会直接报错,这个问题在Laravel后面的版本中换了一个对用户友好一点的界面。

6.为之前的功能添加用户以及修改一些bug

  • 创建文章的时候添加user_id字段
  • 将Sessions/create.blade.php复制一份给registration/create.blade.php,因为这是注册界面,然后重写一份登录页面到Sessions/create.blade.php中。
  • 添加登录页面后,如果已经登录的用户则不能再登录,在相应的控制器中添加auth中间件即可,比如给SessionsController添加guest访客中间件,意味着只有访客才能使用:
public function __construct(){
$this->middleware('guest',['only' => ['create', 'store']]);
}
Gijera · 本站所有文章遵循自由转载-非商用-非衍生-保持署名.
All aritcles of this website follow the CC-3.0 License.知识共享许可协议