1. 命令

php artisan make:auth  # 生成文件和配置
php artisan migrate # 创建数据表

以上命令主要做了几件事

  1. route/web.php中增加了路由配置
  2. resources/views/auth和resources/views/layouts创建了视图文件

2. 快速认证

主要涉及到Controllers\Auth下面的文件

打开文件你可能会发现里面并没有定位各种方法,也没有继承关系,但是有使用trait,你可以看到use xxxx;这句话,打开相应文件会发现别有洞天。

2.1 自定义路径

当用户成功通过身份认证后,他们会被重定向到 /home URI。你可以通过在 LoginController、RegisterController 和 ResetPasswordController中设置 redirectTo 属性来自定义重定向的位置:

protected $redirectTo = '/';

如果重定向路径需要自定义生成逻辑,你可以定义 redirectTo 方法来代替 redirectTo 属性:

protected function redirectTo()
{
return '/path';
}

{tip} redirectTo 方法优先于 redirectTo 属性。

2.2 自定义用户名

Laravel 默认使用 email 字段来认证。如果你想用其他字段认证,可以在 LoginController 里面定义一个 username 方法:

public function username()
{
return 'username';
}

2.3 自定义看守器

你还可以自定义用于认证和注册用户的「看守器」。要实现这一功能,需要在 LoginController、RegisterController 和 ResetPasswordController 中定义 guard 方法。该方法需要返回一个看守器实例:

use Illuminate\Support\Facades\Auth;

protected function guard()
{
return Auth::guard('guard-name');
}

2.4 自定义验证/存储

要修改新用户在应用注册时所需的表单字段,或者自定义如何将新用户存储到数据库中,你可以修改 RegisterController 类。该类负责验证和创建应用的新用户。

RegisterController 的 validator 方法包含了应用验证新用户的规则,你可以按需要自定义该方法。

RegisterController 的 create 方法负责使用 Eloquent ORM 在数据库中创建新的 App\User 记录。你可以根据数据库的需要自定义该方法。

2.5 Auth::xx()

你可以通过 Auth facade 来访问认证的用户:

use Illuminate\Support\Facades\Auth;

// 获取当前已认证的用户...
$user = Auth::user(); // 获取当前已认证的用户 ID...
$id = Auth::id(); //是否认证
Auth::check()

2.6 保护路由

路由中间件 用于只允许通过认证的用户访问指定的路由。Laravel 自带了在 Illuminate\Auth\Middleware\Authenticate 中定义的 auth 中间件。由于这个中间件已经在 HTTP 内核中注册,所以只需要将中间件附加到路由定义中:

Route::get('profile', function () {
// 只有认证过的用户可以...
})->middleware('auth');

当然,如果使用 控制器,则可以在构造器中调用 middleware 方法来代替在路由中直接定义:

public function __construct()
{
$this->middleware('auth');
}

2.7 指定看守器

将 auth 中间件添加到路由时,还需要指定使用哪个看守器来认证用户。指定的看守器对应配置文件 auth.php 中 guards 数组的某个键

public function __construct()
{
$this->middleware('auth:api');
}

3 手动认证用户

3.1 不使用Controllers\Auth里面的控制器,自己直接调用认证类进行用户验证

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
/**
* 处理身份认证尝试.
*
* @return Response
*/
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// 认证通过...
return redirect()->intended('dashboard');
}
}
}
  • attempt 方法会接受一个键值对数组作为其第一个参数。这个数组的值将用来在数据库表中查找用户,如果匹配则返回true,否则返回false
  • 重定向器上的 intended 方法将重定向到用户尝试访问的 URL。如果该 URL 无效,会给该方法传递回退 URI。

3.2 指定额外条件

除了用户的电子邮件和密码之外,你还可以向身份验证查询添加额外的条件。例如,我们可能会验证用户是否被标记为「活动」状态:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// 用户处于活动状态,不被暂停,并且存在。
}

3.3 访问指定的看守器实例

可以通过 Auth facade 的 guard 方法来指定要使用哪个看守器实例。这允许你使用完全独立的可认证模型或用户表来管理应用的抽离出来的身份验证。

传递给 guard 方法的看守器名称应该与 auth.php 配置文件中 guards 中的其中一个值相对应:

if (Auth::guard('admin')->attempt($credentials)) {
//
}

3.4 注销用户

要让用户从应用中注销,可以在 Auth facade 上使用 logout 方法。这会清除用户会话中的身份验证信息:

Auth::logout();

3.5 记住用户

如果你想要在应用中提供「记住我」的功能 , 则可以传递一个布尔值作为 attempt 方法的第二个参数,这会使在用户手动注销前一直保持已验证状态。当然,users 数据表必须包含 remember_token 字段,这是用来保存「记住我」的令牌。

if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// 这个用户被记住了...
}

{tip} 如果你使用 Laravel 内置的 LoginController,则「记住」用户的逻辑已经由控制器使用的 traits 来实现。

如果你「记住」用户,可以使用 viaRemember 方法来检查这个用户是否使用「记住我」 cookie 进行认证:

if (Auth::viaRemember()) {
//
}

3.6其它认证方法

  1. 验证用户实例

如果需要将现有用户实例记录到应用,可以使用用户实例调用 login 方法。给定的对象必须实现了 Illuminate\Contracts\Auth\Authenticatable 契约 。当然,Laravel 自带的 App\User 模型已经实现了这个接口:

Auth::login($user);

// 登录并且「记住」给定用户...

Auth::login($user, true);

当然,你也可以指定要使用的看守器实例:

Auth::guard('admin')->login($user);
  1. 通过 ID 验证用户

你可以使用 loginUsingId 方法通过其 ID 将用户记录到应用中。这个方法只接受要验证的用户的主键:

Auth::loginUsingId(1);

//登录并且「记住」给定的用户...
Auth::loginUsingId(1, true);
  1. 仅验证用户一次

    你可以使用 once 方法将用户记录到单个请求的应用中。不会使用任何会话或 cookies, 这个对于构建无状态的 API 非常的有用:
if (Auth::once($credentials)) {
//
}

laravel5.5用户认证的更多相关文章

  1. laravel5.5用户认证源码分析

    目录 1. 生成相关文件和配置 2. 分析路由文件 3. 以登陆开始为例,分析auth到底是怎么工作的 3.1 分析登录文件 3.2 分析门面Auth. 1. 生成相关文件和配置 快速生成命令 php ...

  2. Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

    用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...

  3. Django--自定义用户认证

    Django自带的用户认证 以前都是用Django自带的用户认证,用户名字段一对一关系对应Django--User表(其实它也是继承了abstractbaseuser). 1 2 3 from dja ...

  4. linux(十二)___Apache服务器用户认证、虚拟主机的配置

    创建xiangkejin  zhangsan两个用户 可看见文件中创建的两个用户: 建立虚拟目录并配置用户认证 ①建立虚拟目录 /xiangkejin ②在Apache的主配置文件httpd.conf ...

  5. [django]用户认证中只允许登陆用户访问(网页安全问题)

    当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [    url(r'^$', 'login ...

  6. 使用JDBC实现Oracle用户认证

    两天时间写的小品,以前的J2EE环境基本使用框架.现在使用JDBC配合Oracle存储过程模拟了一下用户注册和用户认证. 一.添加必须的jar包 需要JDBC连接Oracle的包和shiro-core ...

  7. ldap实现用户认证

    LDAP的用户认证类. public class LDAPHelper { private DirectoryEntry _objDirectoryEntry; /// <summary> ...

  8. auth用户认证库

    关于auth库,建议如下:1. ion_auth,基于Redux重写而成,非常不错的认证库,国外用的很多,几个最新的ci2.0.2基础上的开源系统(如doveforum)都用它,支持ci 2.0和以上 ...

  9. 禅道PMS兼容redmine用户认证接口

    项目地址:https://github.com/web3d/zentao-redmine-userauth zentao-redmine-userauth 做了一个基本的用户认证接口,兼容redmin ...

随机推荐

  1. 笨办法学Python(五)

    习题 5: 更多的变量和打印 我们现在要键入更多的变量并且把它们打印出来.这次我们将使用一个叫“格式化字符串(format string)”的东西. 每一次你使用 " 把一些文本引用起来,你 ...

  2. C#中RichTextBox字体不统一(中英文)

    this.richTextBox1.Font = new System.Drawing.Font("微软雅黑", 12F);// new System.Drawing.Font(& ...

  3. framework7 可以拉动右侧工具栏和点击当前item就可以出发事件的HTML结构

    <li class="swipeout"> <div class="swipeout-content item-content"> &l ...

  4. robotframework实战一

    1.环境 1.Robotframework 安装环境,见以下帖子,只要保证python安装成功,安装了python的pip,就可以使用pip一路安装下去了.以下帖子也有基础的操作,帖子路径 http: ...

  5. Oracle 日期加减运算

    -- Start 我们都知道数字可以进行加.减.乘.除等运算.那么,日期可不可以呢?答案是,日期只能进行加.减运算. 在开始操作日期之前,我们先了解一下 Oracle 支持哪些日期数据类型,如下所示: ...

  6. ACM Arabella Collegiate Programming Contest 2015 F. Palindrome 并查集

    题目链接:http://codeforces.com/gym/100676/attachments 题意: 给一个字符串,有一些约束条件,两个位置要相同,有一些是问号,求最后有多少种方案回文? 分析: ...

  7. VPS一键测试脚本 / 自带结果导出

    脚本命令 一下脚本可能卡住,运行时间长,建议在screen中运行. 1.秋水逸冰大佬的Bench.sh脚本 特点:用时较短,对系统测试全面,英文:但缺少国内节点测速 有趣的是,bench.sh既是脚本 ...

  8. maven parent version not found

    需要把parent工程,也就是package是pom的那个工程先install一下 要是不行的话可以试下mvn -X clean install,-X表示强制从远程库更新dependency:再不行可 ...

  9. matlab的figure窗口命名为中文

    figure('NumberTitle', 'off', 'Name', '我的窗口名字');

  10. SpringBoot中使用配置文件

    一般都是把xml配置文件转换为@Bean的模式,如果非要使用xml配置文件,方式如下: /** * 将配置文件引入springboot */ @Configuration @ImportResourc ...