前期准备

Laravel的权限配置文件位于 config/auth.php,Laravel的认证组件由“guards”和“providers”组成,

Guard 通过 session 来维护用户登录的状态。Provider 是登录以及访问页面的时候获取用户的信息。本篇主要讲的是如何自定义Provider ,获取用户信息。

config/auth.php文件

Laravel提供了两种guard,web以及api,采取默认的web认证。在guards的web中,用了users提供者。接下来就需要注意了,我们自定义了服务提供者,就需要换到新的providers。首先,定义一个使用新驱动的provider:

 'providers' => [
'users' => [
'driver' => 'Focus', //名称自定义,这里为Focus
'model' => App\Models\User::class, //Model放在Models文件夹下
],
],

Notes: 默认提供了两种驱动database和eloquent,而这两种的提供者分别是DatabaseUserProvider和EloquentUserProvider,都处于laravel\framework\src\Illuminate\Auth文件夹下,实现了UserProvider,我们自定义的 Focus provider 也将实现UserProvider。

生成路由和视图

php artisan make:auth  //命令可快速生成认证所需要的路由和视图

Http/Controllers 和 resources/views下会相应生成控制器和视图

默认用的Email,我们用username

LoginController:

//添加此方法,返回username

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

login.blade.php:

将邮箱改为域账号,email 改为username

数据库

修改.env配置中的数据库信息。

php artisan make:model Models/User  // 使用命令创建User模型

默认User是继承Model的,需要修改。

use Illuminate\Foundation\Auth\User as Authenticatable;  //引入Authenticatable
class User extends Authenticatable
{
protected $table = 'employee';
protected $primaryKey = 'employee_id'; //can set all fields to user model
protected $guarded = [];
}

为什么要引入Authenticatable呢,是因为Authenticatable实现了Illuminate\Contracts\Auth\Authenticatable接口,而FocusUserProvider 需要用到接口的实现。

创建扩展

在app下新建 Extensions/FocusUserProvider 文件,参考DatabaseUserProvider和EloquentUserProvider,实现UserProvider:

namespace App\Extensions;

use App\Services\LdapValidator;
use Illuminate\Support\Str;
use Illuminate\Contracts\Auth\UserProvider;
use \Illuminate\Contracts\Auth\Authenticatable; class LaravelUserProvider implements UserProvider { protected $model; public function __construct($model)
{
$this->model = $model;
} //登录成功后,通过此方法获取用户信息,返回匹配该ID的 Authenticatable 实现
public function retrieveById($identifier) { //此处可以将信息放入缓存,缓解数据库压力。
$model = $this->createModel();
return $model->newQuery()
->where($model->getAuthIdentifierName(), $identifier)
->first();
} public function retrieveByToken($identifier, $token) {
}
public function updateRememberToken(Authenticatable $user, $token) {
} //该方法可以根据账号名去查询数据库是否存在匹配的账号
public function retrieveByCredentials(array $credentials) { if (empty($credentials)) {
return;
} // First we will add each credential element to the query as a where clause.
// Then we can execute the query and, if we found a user, return it in a
// Eloquent User "model" that will be utilized by the Guard instances.
$query = $this->createModel()->newQuery(); foreach ($credentials as $key => $value) {
if (! Str::contains($key, 'password')) {
$query->where($key, $value);
}
} return $query->first();
} //该方法可以验证密码是否正确,因为我们是ldap登录,可以在此验证域账号
public function validateCredentials(Authenticatable $user, array $credentials) { //LdapValidator类是为了验证域密码的,放在了app/Services,在上面已经引入
$Ldap = new LdapValidator($user->username, $credentials['password']); return $Ldap->validatePassword();
} /**
* Create a new instance of the model.
*
* @return \Illuminate\Database\Eloquent\Model
*/
public function createModel()
{
$class = '\\'.ltrim($this->model, '\\'); return new $class;
} }

注册提供者

Laravel 提供了AuthServiceProvider, 我们可以在这里注册。

public function boot()
{
$this->registerPolicies(); //Focus为auth.php里面定义的驱动
Auth::provider('Focus', function($app, array $config){ return new FocusUserProvider ($config['model']);
});
}

下面就可以访问http://你的域名/login 登录系统

Laravel用户认证的更多相关文章

  1. Laravel用户认证系统的实现细节

    原文地址:http://www.php.cn/php-weizijiaocheng-406076.html 这篇文章主要介绍了关于Laravel用户认证系统的实现细节,有着一定的参考价值,现在分享给大 ...

  2. laravel 用户认证简单示例

    一.模型代码: 实现接口:\Illuminate\Contracts\Auth\Authenticatable 并引入trait:\Illuminate\Auth\Authenticatable &l ...

  3. 最适合入门的Laravel中级教程(二)用户认证

    之前的初级教程主要是学习简单的增删改查: 接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序: 我们先来学习 laravel 的用户认证功能: 在现代网站中基本都有用户系统: 而我们每开 ...

  4. Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证

    在JavaScript前端技术大行其道的今天,我们通常只需在后台构建API提供给前端调用,并且后端仅仅设计为给前端移动App调用.用户认证是Web应用的重要组成部分,基于API的用户认证有两个最佳解决 ...

  5. Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证以及刷新访问令牌

    最近在做一个公司的项目,前端使用 Vue.js,后端使用 Laravel 构建 Api 服务,用户认证的包本来是想用 Laravel Passport 的,但是感觉有点麻烦,于是使用了 jwt-aut ...

  6. laravel 的用户认证

    1.简介 Laravel 中实现用户认证非常简单.实际上,几乎所有东西都已经为你配置好了.配置文件位于config/auth.php,其中包含了用于调整认证服务行为的.文档友好的选项配置. 在底层代码 ...

  7. laravel的auth用户认证的例子

    参考http://www.cnblogs.com/yjf512/p/4042356.html 需要注意的是,生成的测试数据,password部分必须用laravel自带的hash一下 Hash::ma ...

  8. Laravel核心解读 -- 扩展用户认证系统

    扩展用户认证系统 上一节我们介绍了Laravel Auth系统实现的一些细节知道了Laravel是如何应用看守器和用户提供器来进行用户认证的,但是针对我们自己开发的项目或多或少地我们都会需要在自带的看 ...

  9. 【laravel】用户认证之----手动认证用户

    模型 如果某个模型类需要用于认证,必须继承自 Illuminate\Foundation\Auth\User 基类,否则会报错.然后在这个模型类中使用 Notifiable Trait,里面提供了用户 ...

随机推荐

  1. 【Java】获取当前操作系统桌面路径

    //当前用户桌面 File desktopDir = FileSystemView.getFileSystemView() .getHomeDirectory(); String desktopPat ...

  2. 安装Office Visio 提示Office 16 Click-to-Run Extensibility Component

    今天在安装 Office Visio 2016 时,点击安装程序,出现以下错误:   出现这个问题的原因就是你的电脑以前安装过32位的office,卸载时,注册表没有清理干净. 解决方案: 在win1 ...

  3. 关于javascript中的prototype

    作为一个致力于前端开发的人员,能够熟练掌握javascript的原理和机制是每个小白的必经之路,这也是最痛苦的.有人说前端功力好不好最主要的就是看对js的掌握能力,有人说十年也啃不完一门javascr ...

  4. 代码审计-YXcms1.4.7

    题外: 今天是上班第一天,全都在做准备工作,明天开始正式实战做事. 看着周围稍年长的同事和老大做事,自己的感觉就是自己还是差的很多很多,自己只能算个废物. 学无止境,我这样的垃圾废物就该多练,保持战斗 ...

  5. [CODEVS1537] 血色先锋队 - BFS

    题目描述 Description 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物.孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重 ...

  6. php反序列化漏洞复现过程

    PHP反序列化漏洞复现 测试代码 我们运行以上代码文件,来证明函数被调用: 应为没有创建对象,所以构造函数__construct()不会被调用,但是__wakeup()跟__destruct()函数都 ...

  7. opencv::SURF特征

    SURF特征基本介绍 SURF(Speeded Up Robust Features)特征关键特性: -特征检测 -尺度空间 -选择不变性 -特征向量 工作原理 . 选择图像中POI(Points o ...

  8. 阻塞IO模型

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> # ...

  9. 并发编程之Fork/Join

    并发与并行 并发:多个进程交替执行. 并行:多个进程同时进行,不存在线程的上下文切换. 并发与并行的目的都是使CPU的利用率达到最大.Fork/Join就是为了尽可能提高硬件的使用率而应运而生的. 计 ...

  10. python学习-面向对象(六)

    1.类中的实例方法 self参数最大的作用是引用当前方法的调用者 类调用实例方法,python不会位为一个参数绑定调用者(因为实例方法的调用者应该是对象,而此时是类) 2.类方法与静态方法