Passport(Laravel5.5.*)密码授权简单使用
1、安装 laravel 项目:
composer create-project laravel/laravel lhuaxi2 --prefer-dist "5.5.*";
安装完后配置好数据库等信息。
2、使用 Composer 安装 Passport :
composer require laravel/passport:~4.0;
注意 Laravel 5.6 已经发布,最新的 laravel/passport
版本为 5.0 适配 Laravel 5.6
,所以我们需要使用 Laravel 5.5 的适配版本 4.0
。
(1)、安装成功之后,我们需要设置他们的服务提供者,所以打开config/app.php文件,并在其中添加以下代码
'providers' => [
'''
Laravel\Passport\PassprotServiceProvider::class,
],
注: laravel5.5
以上版本可以忽略这一步骤,此步骤争对 5.5
以下版本。
3、生成数据表:
Passport 扩展包里已经自动注册了迁移文件加载,执行 migrate,会自动运行扩展包里的迁移文件,由此来创建存储客户端和令牌的数据表:
4、创建加密秘钥:
接下来,运行 php artisan passport:keys
命令来创建生成安全访问令牌时所需的加密密钥:
$ php artisan passport:keys
执行成功后,会在 storage
目录中看到两个以 oauth
开头的秘钥文件:
5、创建客户端:
$ php artisan passport:client --password --name='huaxi-ios'
passport:client
命令可以创建一个客户端,由于我们使用的是密码模式,所以需要增加 --password
参数。同时还可以增加 --name
参数为客户端起个名字,我们这里起名为 lhuaxi2-ios
:
命令行中已经输出了创建的 client_id
和 client_secret
,我们找个地方复制保存起来。
6、创建控制器AuthorizationsController
,命令:php artisan make:controller Api\\AuthorizationsController
,
在AuthorizationsController
中编写代码:
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response as Psr7Response;
use Psr\Http\Message\ServerRequestInterface;
use League\OAuth2\Server\Exception\OAuthServerException;
use League\OAuth2\Server\AuthorizationServer;
use Illuminate\Support\Facades\Auth;
class AuthorizationsController extends Controller
{
public function getAccessToken(AuthorizationServer $server, ServerRequestInterface $serverRequest)
{
try {
return $server->respondToAccessTokenRequest($serverRequest, new Psr7Response)->withStatus(201);
} catch (OAuthServerException $e) {
return $this->response->errorUnauthorized($e->getMessage());
}
}
public function getUserInfo()
{
$user = Auth::user();
return $user;
}
}
7、在api.php中加一条测试路由:
Route::group(['middleware' => 'auth:api'], function(){
Route::post('get_user_info', 'Api\AuthorizationsController@getUserInfo');
});
Route::post('get_access_token', 'Api\AuthorizationsController@getAccessToken');
8、令牌获取:
(1).获取访问令牌
密码模式我们通过 http://lhuaxi2.com/api/get_access_token
这个路由获取访问令牌。提交的参数如下:
grant_type —— 密码模式固定为 password
;
client_id —— 通过 passport:client
创建的客户端id
;
client_secret —— 通过 passport:client
创建的客户端 secret
;
username —— 登录的用户名,数据库中任意用户邮箱;
password —— 用户密码;
scope —— 作用域,可填写 *
或者为空;
提交正确的 client
信息以及任意已存在用户的用户名和密码,可以正确的获取到访问令牌。
token_type —— 令牌类型;
expires_in—— 多长时间后过期;
access_token —— 访问令牌;
refresh_token —— 刷新令牌;
(2).刷新访问令牌
刷新访问令牌
接口与 获取访问令牌
接口一样,只是参数不同。
grant_type —— 刷新令牌固定为 refresh_token
;
client_id —— 通过 passport:client
创建的客户端id
;
client_secret —— 通过 passport:client
创建的客户端 secret
;
refresh_token —— 刷新令牌;
scope —— 作用域,可填写 *
或者为空;
刷新令牌不用提交用户的用户名和密码,而是直接使用 refresh_token
换取新的访问令牌,注意修改 grant_type
为refresh_token
。
9、把获取用户信息的接口放在api中间件外面就获取不到用户信息的:
返回结果:
把这条路由放回api中间件里面:
返回结果:
passport简单使用,欢迎大家一起改进学习,发布更好文章,一起进步。谢谢!
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: