1. 概述
一年前写过一篇关于Passport多表认证的博客,但是有小伙伴反应说:走不通,于是抽时间,重构一下这篇博客,当然不同的时间,解决方案也不一样
当然也会有很多重复的地方,请参考可用的地方
上一篇博客地址:Laravel Passport认证-多表、多字段解决方案
2. 单表用户登录
2.1 安装
首先通过 Composer 包管理器安装 Passport:
根据laravel不同的版本,加载不同的管理包,如果你使用laravel5.4版本;使用命令composer require laravel/passport v4.*;不然可能因为版本问题,加载失败
composer require laravel/passport v4.*
成功安装Passport包之后,我们需要设置他们的服务提供者。所以,打开你的config / app.php文件,并在其中添加以下提供程序。
'providers' => [
....
Laravel\Passport\PassportServiceProvider::class,
],
2.2 迁移数据库
Passport 服务提供者为框架注册了自己的数据库迁移目录,所以在注册服务提供者之后(Laravel 5.5之后会自动注册服务提供者)需要迁移数据库,Passport 迁移将会为应用生成用于存放客户端和访问令牌的数据表:
php artisan migrate
2.3 生成加密键oauth_clients
php artisan passport:install
该命令将会创建生成安全访问令牌(token)所需的加密键
此外,该命令还会创建“personal access”和“password grant”客户端用于生成访问令牌,生成记录存放在数据表 oauth_clients
2.4 修改user模型
添加 Laravel\Passport\HasApiTokens trait 到 App\User 模型,该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
2.4.1 验证字段进行修改
默认验证email,如果你验证字段不是email,这里可以充值验证规则
例:验证phone和email一起验证;在User模型中添加如下方法:
public function findForPassport($username)
{
return $this->orWhere('email', $username)->orWhere('phone', $username)->first();
}
2.4.1 密码验证进行修改
默认验证密码规则为Hash 如果你的密码验证规则不是Hash这里需要更改
例:请求密码等于数据库密码
public function validateForPassportPasswordGrant($password)
{
//如果请求密码等于数据库密码 返回true(此为实例,根据自己需求更改)
if($password == $this->password){
return true;
}
return false;
}
2.5 注册获取Token路由
接下来,需要在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 、enableImplicitGrant、tokensCan、tokensEx