之前的初级教程主要是学习简单的增删改查;
接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序;
我们先来学习 laravel 的用户认证功能;
在现代网站中基本都有用户系统;
而我们每开发一个网站就实现一遍用户系统想想也是挺心累的;
还好 Laravel 已经贴心的帮我们完成了常用的用户认证功能;
比如说 注册、登录、重置密码;
并设计好了用户表 users ;
编写了带有登录登出功能的 Auth 类;
而且可以非常方便的进行扩展修改;
再个 Laravel 的用户系统跟其他功能比如 Passport 等结合也很紧密;
因此墙裂推荐使用 Laravel 的用户系统;
要使用用户认证功能需要先运行命令行;
php artisan make:auth
通过 git 我们可以看到有这些文件发生了变化;
访问下 登录页面看看效果 /login
;
开发项目的时候一般不会使用默认的页面;
如果需要更改页面结构或者样式;
直接修改 resources/views/auth 目录下对应的文件即可;
查看 web.php 可以发现增加了如下两行;
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
执行 route:list
看下新增的路由;
php artisan route:list
如果修改视图文件已经不能满足你的需求了;
我们还可以在 web.php 中定义路由来覆盖上图中的这些内容;
或者直接覆盖控制器中的方法;
在成功注册成功、登录成功、重置密码成功后默认都会重定向到 /home
页面;
如果说想想在登录成功后重定向到个人中心 /user
页面;
我可以修改 app/Http/Controllers/Auth/LoginController.php 文件中的 $redirectTo
属性;
甚至如果需要根据登录的用户的角色跳转到不同的页面;
Laravel 还预留了 redirectPath
方法;
只需要在 app/Http/Controllers/Auth/LoginController.php 中自定义 redirectPath
方法即可;
/**
* 可以根据逻辑判断自定义跳转链接
*/
public function redirectPath()
{
}
在国内很多时候我们都是选择使用手机号登录的;
那么我们可以在 users 表中增加 phone 列;
然后参考图中的 AuthenticatesUsers
trait 的 login
方法;
Auth 也提供了 attempt
方法用来认证用户;
\Auth::attempt(['phone' => '***', 'password' => '123456'])
当登录成功后会向 session 中存储登录的用户id ;
我们注册一个用户并登录;
然后在 app/Http/Controllers/HomeController.php 的 index
中打印下 session 看下;
public function index()
{
dump(session()->all());
return view('home');
}
访问 /home
页面;
这个 login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d
明显不是一个固定 key ;
我们如果想获取登录的用户 id 可以通过下面这个方式;
$userId = Auth::id();
如果说想获取包括用户名等完整的用户信息则可以这样;
$user = Auth::user();
修改下 app/Http/Controllers/HomeController.php 的 index
再打印;
public function index()
{
dump(session()->all());
dump(\Auth::id());
dump(\Auth::user());
return view('home');
}
很多网站都是分成面向普通用户的前台和给管理员用的后台的;
这种情况下我们可以自定义多套用户体系 guard;
比如说我的博客就分为不需要注册直接使用第三方平台的 oauth 和不允许注册的后台管理 admin ;
auth.php
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'users',
],
'oauth' => [
'driver' => 'session',
'provider' => 'oauth',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'oauth' => [
'driver' => 'eloquent',
'model' => App\Models\OauthUser::class,
],
],
guard 的用法可以参考我的博客源代码; https://github.com/baijunyao/laravel-bjyblog
这里就不多讲了;
吸取初级教程的教训;
中级教程一开始就把代码按章节推送到 github 上供童鞋们参考;
链接在这里: https://github.com/baijunyao/laravel-course