简介
注:想要快速上手?只需要在新安装的 Laravel 应用下运行
php artisan make:auth
和php artisan migrate
,这两个命令会生成用户登录注册所需要的所有东西,然后在浏览器中访问http://your-app.dev/register
即可。
Laravel 中实现用户认证非常简单。实际上,几乎所有东西 Laravel 都已经为你配置好了。配置文件位于 config/auth.php
,其中包含了用于调整认证服务行为的、文档友好的选项配置。
在底层代码中,Laravel 的认证组件由“guards”和“providers”组成,Guard 定义了用户在每个请求中如何实现认证,例如,Laravel 通过 session
guard 来维护 Session 存储的状态和 Cookie。
Provider 定义了如何从持久化存储中获取用户信息,Laravel 底层支持通过 Eloquent 和数据库查询构建器两种方式来获取用户,如果需要的话,你还可以定义额外的 Provider。
如果看到这些名词觉得云里雾里,大可不必太过担心,因为对绝大多数应用而言,只需使用默认认证配置即可,不需要做什么改动。
学院君注解:通俗点说,在进行用户认证的时候,要做两件事,一个是从数据库存取用户数据,一个是把用户登录状态保存起来,在 Laravel 的底层实现中,通过 Provider 存取数据,通过 Guard 存储用户认证信息,前者主要和数据库打交道,后者主要和 Session 打交道(API 例外)。
数据库考量
默认情况下,Laravel 在 app
目录下包含了一个 Eloquent 模型App\User
,这个模型可以和默认的 Eloquent 认证驱动一起使用。如果你的应用不使用 Eloquent,你可以使用 database
认证驱动,该驱动使用 Laravel 查询构建器与数据库交互。
为 App\User
模型构建数据库表结构的时候,确保 password
字段长度至少有60位。保持默认字符串长度(255)是个不错的选择。
还有,你需要验证 users
表包含了 remember_token
,该字段是个可以为空的字符串类型,字段长度为100,用于在登录时存储应用维护的“记住我” Session 令牌。
快速入门
Laravel 提供了几个预置的认证控制器,位于 App\Http\Controllers\Auth
命名空间下, RegisterController
用于处理新用户注册, LoginController
用于处理用户登录认证, ForgotPasswordController
用于处理重置密码邮件链接, ResetPasswordController
包含重置密码逻辑,每个控制器都使用 trait 来引入它们需要的方法。对很多应用而言,你根本不需要修改这些控制器:
路由
Laravel 通过运行如下命令可快速生成认证所需要的路由和视图:
php artisan make:auth
新安装的应用运行该命令会生成布局、注册和登录视图,以及所有的认证路由,同时生成 HomeController
用于处理应用的登录请求。
打开 routes/web.php
路由文件会发现新增了两行:

登录注册相关路由都定义在上面 Auth::routes()
方法内。
视图
正如上面所提到的,php artisan make:auth
命令会在 resources/views/auth
目录下创建所有认证需要的视图。
make:auth
命令还创建了 resources/views/layouts
目录,该目录下包含了应用的基础布局文件。所有这些视图都使用了 Bootstrap CSS 框架,你也可以根据需要对其进行自定义。
认证
现在你已经为自带的认证控制器设置好了路由和视图,接下来我们来实现新用户注册和登录认证。你可以在浏览器中访问定义好的路由,认证控制器默认已经包含了注册及登录逻辑(通过trait)。
我们先来注册一个新用户,在浏览器中访问 http://laravel55.dev/register
,即可进入注册页面:
填写表单点击『Register』按钮即可完成注册。注册成功后页面跳转到认证后的页面 http://laravel55.dev/home
:
要测试登录功能,可以先退出当前用户,然后访问登录页面 http://laravel55.dev/login
:
使用我们之前注册的信息登录成功后,同样会跳转到 http://laravel55.dev/home
。
自定义路径
我们已经知道,当一个用户成功进行登录认证后,默认将会跳转到 /home
,你可以通过在 LoginController
, RegisterController
和 ResetPasswordController
中定义 redirectTo
属性来自定义登录认证成功之后的跳转路径: