前期准备

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. yii2 对字段 自动加一 或 减一

    用于数字类型,将值进行 累加 或者 累减 $count = 1, 就是加一 .   $count = -1, 就是减一 . $effect =  Model::updateAllCounters( [ ...

  2. python语言程序设计基础(嵩天)第二章课后习题

    p56: *2.1 实例1的修改.改造实例代码1.1,采用eval(input(<提示内容>))替换现有输入部分,并使输出的温度值为整数. 源代码: TempStr=input(" ...

  3. XCTF-upload

    这道题的话,看了一下是RCTF-2015的原题....可是这也太难了吧QAQ,文件名作为注入点可也是太秀了,害的我一直以为是文件上传QAQ,并且这道题的坑还不少,就是注入时的输出只能为10进制.... ...

  4. .Net Core AA.FrameWork应用框架介绍

    开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...

  5. SQL SERVER数据库三种数据插入方式

    数据插入:INSERT INTO A(CBM,CMC) VALUES('1','测试')--单条数据插入INSERT INTO A(CBM,CMC)SELECT '1','测试'--单条数据插入INS ...

  6. mac 下修改 jenkins 端口以及Jenkins的启动、关闭与更新

    安装包安装的Jenkins修改默认端口的方法: 先关闭jenkins ; 命令行下修改端口:sudo defaults write /Library/Preferences/org.jenkins-c ...

  7. 最简单的ArcGIS Engine应用程序(中)

    上一篇中只能添加代码中指定的shp文件(最简单的ArcGIS Engine应用程序(上)) 为了让用户可以浏览磁盘加载指定的shp文件,需做一下调整. 从工具箱往窗体上添加一个OpenFileDial ...

  8. 通过机器学习的线性回归算法预测股票走势(用Python实现)

    在本人的新书里,将通过股票案例讲述Python知识点,让大家在学习Python的同时还能掌握相关的股票知识,所谓一举两得.这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn ...

  9. electron开发环境搭建

    开发环境 Node.js Vscode vscode安装Debugger for Chrome 创建开发目录(也是解决方案) 执行初始化命令,创建electronpicture工程,并添加main.j ...

  10. Jetcache

    转存 Jetcache https://github.com/alibaba/jetcache/wiki/GettingStarted_CN