用户认证系统(基础介绍)
使用过Laravel的开发者都知道,Laravel自带了一个认证系统来提供基本的用户注册、登录、认证、找回密码,如果Auth系统里提供的基础功能不满足需求还可以很方便的在这些基础功能上进行扩展。这篇文章我们先来了解一下Laravel Auth系统的核心组件。
Auth系统的核心是由 Laravel 的认证组件的「看守器」和「提供器」组成。看守器定义了该如何认证每个请求中用户。例如,Laravel 自带的 session 看守器会使用 session 存储和 cookies 来维护状态。
下表列出了Laravel Auth系统的核心部件
名称 | 作用 |
---|---|
Auth | AuthManager的Facade |
AuthManager | Auth认证系统面向外部的接口,认证系统通过它向应用提供所有Auth用户认证相关的方法,而认证方法的具体实现细节由它代理的具体看守器(Guard)来完成。 |
Guard | 看守器,定义了该如何认证每个请求中用户 |
User Provider | 用户提供器,定义了如何从持久化的存储数据中检索用户 |
在本文中我们会详细介绍这些核心部件,然后在文章的最后更新每个部件的作用细节到上面给出的这个表中。
开始使用Auth系统
只需在新的 Laravel 应用上运行 php artisan make:auth
和 php artisan migrate
命令就能够在项目里生成Auth系统需要的路由和视图以及数据表。
php artisan make:auth
执行后会生成Auth认证系统需要的视图文件,此外还会在路由文件web.php
中增加响应的路由:
Auth::routes();
Auth
Facade文件中单独定义了routes
这个静态方法
public static function routes()
{
static::$app->make('router')->auth();
}
所以Auth具体的路由方法都定义在Illuminate\Routing\Router
的auth
方法中,关于如何找到Facade类代理的实际类可以翻看之前Facade源码分析的章节。
namespace Illuminate\Routing;
class Router implements RegistrarContract, BindingRegistrar
{
/**
* Register the typical authentication routes for an application.
*
* @return void
*/
public function auth()
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', '