[ Laravel5使用Passport ]安装与配置
一、安装
使用Composer
安装Passport
:
composer require laravel/passport
如果是laravel 5.5版本,可以使用
composer require laravel/passport:v4.0.3
接下来,将Passport
的服务提供者注册到配置文件config/app.php
的providers
数组中:
Laravel\Passport\PassportServiceProvider::class,
Passport
服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行Passport
的迁移命令来自动创建存储客户端和令牌的数据表:
php artisan migrate
二、配置
1、应用配置
请将Laravel\Passport\HasApiTokens
Trait
添加到App\User
模型中,这个Trait
会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用范围:
<?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;
// 添加查询规则,在这里可以修改查询字段
public static function findForPassport($username)
{
return User::where('username', $username)->first();
}
}
接下来,在AuthServiceProvider
的boot
方法中调用Passport::routes
函数。这个函数会注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由:
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* 应用程序的策略映射。
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}
最后,将配置文件config/auth.php
中授权看守器guards
的api
的driver
选项改为passport
。此调整会让你的应用程序在在验证传入的API
的请求时使用Passport
的TokenGuard
来处理:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
2、部署 Passport
第一次将Passport
部署到生产服务器时,需要运行passport:keys
命令。该命令生成Passport
所需要的用来产生访问令牌的加密密钥。生成的这些密钥不会保存在源码控制中,公钥和私钥保存在storage/oauth-private.key
:
php artisan passport:keys
3、创建用户
可以使用seed
来创建用户
php artisan make:seeder UsersTableSeeder
然后进入database\seeds\UsersTableSeeder.php
的run
中写入如下代码:
DB::table('users')->insert([
'name'=>'admin',
'email'=>'1@qq.com',
'password'=>bcrypt('Your Password')
]);
然后运行一下代码填充数据
php artisan db:seed --class=UsersTableSeeder
4、创建密码授权客户端
在应用程序通过密码授权机制来发布令牌之前,在passport:client
命令后加上--password
参数来创建密码授权的客户端。如果你已经运行了passport:install
命令,则不需要再运行此命令:
php artisan passport:client --password
如果你想要当前的客户端只能制定用户使用,你可以在oauth_clients
表的user_id
中设置用户的ID
即可
三、使用
可以使用POSTMAN
或者PHP
模拟请求
Route::get('/auth/password', function (\Illuminate\Http\Request $request){
$http = new \GuzzleHttp\Client();
$response = $http->post('http://test.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => '6',
'client_secret' => 'MT7ZSljsE8xP3SxjyB5My6khL5FZWpyunHpjCEVO',
'username' => '1@qq.com',
'password' => '2',
'scope' => '',
],
]);
return json_decode((string)$response->getBody(), true);
});
服务器返回:
{
"token_type": "Bearer",
"expires_in": 1296000,
"access_token": "",
"refresh_token": ""
}
如果信息错误,会返回如下错误
{"error":"invalid_credentials","message":"The user credentials were incorrect."}
授权后如何获取数据
授权后直接所以Auth::user();
即可获取信息。
常见问题
1、如何定义获取令牌地址
可以在App\Providers\AuthServiceProvider
修改:
Passport::routes(null,['prefix'=>'api/oauth']);
2、Key path "file:///private/var/www/ibm/storage/oauth-private.key" does not exist or is not readable
出现如上错误是因为没有生成密钥,需要执行如下命令:
php artisan passport:keys
-
laravel中distinct()的使用方法与去重 2017-09-11
-
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09
-
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01
-
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
热门文章
-
mysql如何给运营人员添加只有查询权限的账号 2024-12-02
-
Mac 安装mysql并且配置密码 2024-11-20
-
阿里云不同账号(跨账号)ECS服务器同地域如何实现免费内网互通? 2024-11-12
-
electron安装使用better-sqlite3并解决NODE_MODULE_VERSION xxx. This version of Node.js requires 2024-11-06
-
Zerotier+Moon+Nginx实现内网穿透搭建网站 2024-08-23
更多相关好文