laravel 5.6 集成 passport 填坑

按照官方文档配置和安装好passport,文档在这里 https://laravel.com/docs/5.6/passport,中文文档看这里 http://laravelacademy.org/post/8909.html,当然与官方有一点区别,仔细看就会发现。

前提已经使用laravel开箱即用的auth

php artisan make:auth

重要:

$ php artisan passport:client

 Which user ID should the client be assigned to?:
 > 12

 What should we name the client?:
 > testwwww

 Where should we redirect the request after authorization? [http://localhost/auth/callback]:
 > http://127.0.0.1:8000/callback // 重要

New client created successfully.
Client ID: 12
Client secret: xxxxxxxx

这样地址就会重定向到

http://127.0.0.1:8000/callback

在/routes/api.php中添加

Route::get('/redirect', function (){
    $query = http_build_query([
        'client_id' => '12',
        'redirect_uri' => 'http://127.0.0.1:8000/callback',
        'response_type' => 'code',
        'scope' => '',
    ]);

    return redirect('http://127.0.0.1:8000/oauth/authorize?' . $query);
});

我没有配置 Frontend Quickstart ,直接跳到 Converting Authorization Codes To Access Tokens

官方配置,添加代码到:/routes/web.php

Route::get('/callback', function (Request $request) {
    $http = new GuzzleHttp\Client;

    $response = $http->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'authorization_code',
            'client_id' => 'client-id',
            'client_secret' => 'client-secret',
            'redirect_uri' => 'http://example.com/callback',
            'code' => $request->code,
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});

注意:要在/routes/web.php和/routes/api.php文件使用:

use Illuminate\Http\Request;

当我按照上面配置测试时发现网页一直加载,很久都没有反应,这时需要强制关闭php连接服务,我想应该是

$http = new GuzzleHttp\Client;

惹的祸,我们改用postman测试就好了

Laravel passport 一直加载无响应?
Laravel passport authorize keeps loading?

mac 系统使用以下命令

mac 端口占用,我使用的是官方网页服务命令启动的(php artisan serve),会使用8000端口。
sudo lsof -i tcp:8000
kill pid xxx

杀掉这个进程后再次启动php连接服务,php artisan serve

这次我们修改一下官方代码

Route::get('/callback', function (Request $request) {
    print_r($request->code);
    exit;
});

如果没有授权将显示授权页面,完成授权后将直接打印code,复制code,然后在postman或者其他的api调试工具测试获取token
参数就是官方设置的那些参数,

'grant_type' => 'authorization_code',
'client_id' => '12',  // your client id
'client_secret' => 'xxxxxxxxxxxxxxx',   // your client secret
'redirect_uri' => 'http://127.0.0.1:8000/callback',
'code' => copied code

这时就会获取到授权码token了

{
"token_type":"Bearer",
"expires_in":1296000,
"access_token":"xxxxxx",
"refresh_token":"xxxxxxx"
}
headers
body 参数

使用刚刚获取到的access_token,在postmen api调试工具测试获取用户信息

在/routes/api.php文件添加下面代码:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

url

http://127.0.0.1:8000/api/user

header

accept: application/json
accept-encoding: gzip, deflate
accept-language: en-US,en;q=0.8
content-type: application/x-www-form-urlencoded
user-agent: Mozilla/5.0 advanced-rest-client/ Safari/537.36
Authorization: Bearer xxxx

获取结果:

{
"id": 1,
"name": "xxx",
"nick_name":"xxxx",
"user_info": "xxxxx",
"avatar_url": "xxxxxxx",
}
没有带access_token
带access_token
刷新令牌

如果应用颁发的是短期有效的访问令牌,那么用户需要通过访问令牌颁发时提供的 refresh_token 刷新访问令牌,在本例中,我们使用 Guzzle HTTP 库来刷新令牌:

$http = new GuzzleHttp\Client;

$response = $http->post('http://blog.test/oauth/token', [
    'form_params' => [
        'grant_type' => 'refresh_token',
        'refresh_token' => 'the-refresh-token',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'scope' => '',
    ],
]);
return json_decode((string) $response->getBody(), true);

/oauth/token 路由会返回一个包含 access_token 、 refresh_token 和 expires_in 属性的 JSON 响应,同样, expires_in 属性包含访问令牌过期时间(s)。

注意:我们这里只是参考它的form_params参数,不使用GuzzleHttp\Client发送请求,前面提了,GuzzleHttp\Client导致网页无响应,我们使用postman发送。

密码授权模式:

新建密码授权模式的客户端信息,得到Client ID与Client Secret

XdeMac-mini:laravel_5.6 $ php artisan passport:client --password

 What should we name the password grant client? [Laravel Password Grant Client]:
 > pass client

Password grant client created successfully.
Client ID: 3
Client Secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

新建第三方授权模式的客户端信息,观察一下有什么不同:

得到user ID、Client ID与Client Secret三个值,其中user ID是自己设置的,不能与其他客户端user ID重复。

XdeMac-mini:laravel_5.6 $ php artisan passport:client

 Which user ID should the client be assigned to?:
 > 4

 What should we name the client?:
 > san test client

 Where should we redirect the request after authorization? [http://localhost/auth/callback]:
 > http://127.0.0.1:8000/callback

New client created successfully.
Client ID: 4
Client secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
正确的Client ID与Client secret
Client ID与Client secret不匹配的情况
请求所有域

使用密码授权的时候,你可能想要对应用所支持的所有域进行令牌授权,这可以通过请求 * 域来实现。如果你请求的是 * 域,则令牌实例上的 can 方法总是返回 true,这个域只会分配给使用 password 授权的令牌:

$response = $http->post('http://your-app.com/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 'client-id',
        'client_secret' => 'client-secret',
        'username' => 'test@test.com',
        'password' => 'my-password',
        'scope' => '*',
    ],
]);

注意:grant_type为password,Client ID与Client secret必须匹配

填坑完成,不知是什么原因导致网页不断加载的情况,如果哪位大侠知道,烦请给我留言,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容