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. CentOS6.5安装Jenkins

    环境: Jenkins官网选择对应的操作系统,会有相应操作系统的安装方法. 我选择的是CentOS系统. 安装Jenkins: sudo wget -O /etc/yum.repos.d/jenkin ...

  2. vos对接时业务确认及信息安全责任承诺书

           业务确认及信息安全责任承诺书 双方达成一致,******网络科技有限公司向            有限公司提供中国移动网内语音线路接入服务,保证资源长期使用,保证线路资源接通率标 准,合 ...

  3. java 网络流 TCP/UDP

    一.ServerSocket java.lang.Object |-java.net.ServerSocket 有子类SSLServerSocket. 此类实现服务器套接字.服务器套接字等待请求通过网 ...

  4. 不同编程语言在发生stackoverflow之前支持的调用栈最大嵌套层数

    今天我的一位同事在微信群里发了一张图片,勾起了我的好奇心:不同编程语言支持的函数递归调用的最大嵌套层数是? Java 1.8 private static void recur(int i){ Sys ...

  5. IOS instancetype的使用好处

    instancetype的类型表示上,跟id一样,可以表示任何对象类型 instancetype只能用在返回值类型上,不能像 id 一样用在参数类型上 instancetype 比 id 多一个好处 ...

  6. 字符串反转,栈模拟(ZOJ1151)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151 这里可以用栈模拟,也可以用STL,reverse();函数. 但 ...

  7. 简单的Nodejs模块

    说千遍,道万遍,不如动手做一遍,我们实现一个node所谓的模块 看下上面的图,了解一下模块自始至终的一个流程,首先是创建模块,也就是一个入口的js文件,里面加了一些特定的功能,然后导出这个模块, ex ...

  8. 百度Ueditor 图片上传无反应,显示上传0张,不能点确定

    解决办法: \Data\Ueditor\php\Uploader.class.php 190行左右 /** * 获取文件扩展名 * @return string */ private function ...

  9. 2017.11.12 web中JDBC 方式访问数据库的技术

    JavaWeb------ 第四章 JDBC数据库访问技术 在JavaWeb应用程序中数据库访问是通过Java数据库连接(JavaDateBase Connectivity简称JDBC)数据库的链接一 ...

  10. 2017.10.9 JVM入门学习

    1.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...