Laravel 自带了用户认证功能,我们将利用此功能来快速构建我们的用户中心。
首先执行认证脚手架命令,生成代码:
$ php artisan ui:auth
1
$phpartisanui:auth
命令 ui:auth 会询问我们是否要覆盖 app.blade.php,因为我们在前面章节中已经自定义了『主要布局文件』—— app.blade.php,所以此处输入 no,如下:
打开 routes/web.php 查看修改了哪些内容:
routes/web.php
Route::get('/', 'PagesController@root')->name('root');
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
1
2
3
4
5
6
Route::get('/','PagesController@root')->name('root');
Auth::routes();
Route::get('/home','HomeController@index')->name('home');
可以看到在我们的主页下,多了两个表达式,先看第一个:
Auth::routes();
1
Auth::routes();
此处是 Laravel 的用户认证路由,可以在 vendor/laravel/framework/src/Illuminate/Routing/Router.php 中搜索关键词 LoginController 即可找到定义的地方,以上等同于:
// 用户身份验证相关的路由
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
// 用户注册相关路由
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');
// 密码重置相关路由
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update');
// Email 认证相关路由
Route::get('email/verify', 'Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}/{hash}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::post('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 用户身份验证相关的路由
Route::get('login','Auth\LoginController@showLoginForm')->name('login');
Route::post('login','Auth\LoginController@login');
Route::post('logout','Auth\LoginController@logout')->name('logout');
// 用户注册相关路由
Route::get('register','Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register','Auth\RegisterController@register');
// 密码重置相关路由
Route::get('password/reset','Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email','Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}','Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset','Auth\ResetPasswordController@reset')->name('password.update');
// Email 认证相关路由
Route::get('email/verify','Auth\VerificationController@show')->name('verification.notice');
Route::get('email/verify/{id}/{hash}','Auth\VerificationController@verify')->name('verification.verify');
Route::post('email/resend','Auth\VerificationController@resend')->name('verification.resend');
为了更加直观,我们将在 web.php 中使用以上替换 Auth::routes();。
再来看下面这一行:
Route::get('/home', 'HomeController@index')->name('home');
1
Route::get('/home','HomeController@index')->name('home');
生成的视图
ui:auth 命令为我们生成了 resources/views/auth 下几个文件:
视图名称
说明
register.blade.php
注册页面视图
login.blade.php
登录页面视图
verify.blade.php
邮箱认证视图
passwords/email.blade.php
提交邮箱发送邮件的视图
passwords/reset.blade.php
重置密码的页面视图
移除无用页面
因为无需使用 ui:auth 生成的主页,请运行以下命令删除无用文件:
$ rm app/Http/Controllers/HomeController.php
$ rm resources/views/home.blade.php
1
2
$rmapp/Http/Controllers/HomeController.php
$rmresources/views/home.blade.php