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. c++中explicit关键字用法

    C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢? 如果c++类 ...

  2. 如何将Twitter的内容导入到SAP CRM和C4C

    Twitter的内容导入SAP CRM Interaction Center呼叫中心 具体步骤查看我的博客Twitter(also Facebook) is official integrated i ...

  3. eclipse快捷键(个人经常使用的)

    周末闲来无聊,就把一直以来eclipse使用的快捷键梳理了下,希望对有需要的朋友有所帮助,绝对原创! 1.快速复制一行或者多行 首先选中你要复制的行,如果是一行,则鼠标焦点在那一行即可,如果是多行,可 ...

  4. SPOJ - LIS2 Another Longest Increasing Subsequence Problem

    cdq分治,dp(i)表示以i为结尾的最长LIS,那么dp的递推是依赖于左边的. 因此在分治的时候需要利用左边的子问题来递推右边. (345ms? 区间树TLE /****************** ...

  5. openstack kilo 命令行

    把下面内容放到.bashrc中,或者直接执行也行. export OS_USERNAME=adminexport OS_PASSWORD=admin              #根据实际密码来设    ...

  6. 关于requireJS的同步加载和异步加载

    这篇随笔主要记录require('name')和require(['name1','name2'])在同步和异步加载使用的区别 1.require('name')同步加载模块的形式 define(fu ...

  7. ES6 初体验 —— gulp+Babel 搭建ES6环境

    ES6已经火了好久了,我却一直没有在项目中尝试过使用ES6写代码,只是写过几个Demo,在大型项目中使用ES6这件事,我一直不太敢做.最近公司要求做一个小的H5活动专题,我想不如就在这个小项目中使用E ...

  8. System.Web

    如果 using System.Web:还是调用不出来其中的类,请在引用的位子添加 System.Web  引用,有的版本不自带这个命名空间. 类: HttpResponse类       用于绘画验 ...

  9. Oracle 启动 停止JOB

    转自:https://www.cnblogs.com/qianbing/p/6971633.html --查看job下次执行时间以及间隔时间 '; --启动job ); --停用job EXEC DB ...

  10. python基础数据类型之字典的操作

    一. 字典的简单介绍字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯一的. 在保存的时候, 根据key来计算出一个内存地址. 然后将key- ...