laravel 5.6 集成 passport 填坑

按照官方文檔配置和安裝好passport,文檔在這里 https://laravel.com/docs/5.6/passport渺杉,中文文檔看這里 http://laravelacademy.org/post/8909.html,當(dāng)然與官方有一點區(qū)別午衰,仔細(xì)看就會發(fā)現(xiàn)跃须。

前提已經(jīng)使用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;

當(dāng)我按照上面配置測試時發(fā)現(xiàn)網(wǎng)頁一直加載,很久都沒有反應(yīng)裁着,這時需要強制關(guān)閉php連接服務(wù)繁涂,我想應(yīng)該是

$http = new GuzzleHttp\Client;

惹的禍,我們改用postman測試就好了

Laravel passport 一直加載無響應(yīng)?
Laravel passport authorize keeps loading?

mac 系統(tǒng)使用以下命令

mac 端口占用,我使用的是官方網(wǎng)頁服務(wù)命令啟動的(php artisan serve)二驰,會使用8000端口扔罪。
sudo lsof -i tcp:8000
kill pid xxx

殺掉這個進(jìn)程后再次啟動php連接服務(wù),php artisan serve

這次我們修改一下官方代碼

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

如果沒有授權(quán)將顯示授權(quán)頁面桶雀,完成授權(quán)后將直接打印code矿酵,復(fù)制code,然后在postman或者其他的api調(diào)試工具測試獲取token
參數(shù)就是官方設(shè)置的那些參數(shù)矗积,

'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

這時就會獲取到授權(quán)碼token了

{
"token_type":"Bearer",
"expires_in":1296000,
"access_token":"xxxxxx",
"refresh_token":"xxxxxxx"
}
headers
body 參數(shù)

使用剛剛獲取到的access_token,在postmen api調(diào)試工具測試獲取用戶信息

在/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

獲取結(jié)果:

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

如果應(yīng)用頒發(fā)的是短期有效的訪問令牌全肮,那么用戶需要通過訪問令牌頒發(fā)時提供的 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 響應(yīng),同樣柱锹, expires_in 屬性包含訪問令牌過期時間(s)。

注意:我們這里只是參考它的form_params參數(shù)丰包,不使用GuzzleHttp\Client發(fā)送請求禁熏,前面提了,GuzzleHttp\Client導(dǎo)致網(wǎng)頁無響應(yīng)邑彪,我們使用postman發(fā)送瞧毙。

密碼授權(quán)模式:

新建密碼授權(quán)模式的客戶端信息,得到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

新建第三方授權(quán)模式的客戶端信息,觀察一下有什么不同:

得到user ID宙彪、Client ID與Client Secret三個值矩动,其中user ID是自己設(shè)置的,不能與其他客戶端user ID重復(fù)释漆。

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不匹配的情況
請求所有域

使用密碼授權(quán)的時候悲没,你可能想要對應(yīng)用所支持的所有域進(jìn)行令牌授權(quán),這可以通過請求 * 域來實現(xiàn)男图。如果你請求的是 * 域示姿,則令牌實例上的 can 方法總是返回 true,這個域只會分配給使用 password 授權(quán)的令牌:

$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必須匹配

填坑完成栈戳,不知是什么原因?qū)е戮W(wǎng)頁不斷加載的情況,如果哪位大俠知道难裆,煩請給我留言子檀,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乃戈,一起剝皮案震驚了整個濱河市褂痰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偏化,老刑警劉巖脐恩,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侦讨,居然都是意外死亡驶冒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門韵卤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骗污,“玉大人,你說我怎么就攤上這事沈条⌒璺蓿” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵蜡歹,是天一觀的道長屋厘。 經(jīng)常有香客問我,道長月而,這世上最難降的妖魔是什么汗洒? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮父款,結(jié)果婚禮上溢谤,老公的妹妹穿的比我還像新娘瞻凤。我一直安慰自己,他們只是感情好世杀,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布阀参。 她就那樣靜靜地躺著,像睡著了一般瞻坝。 火紅的嫁衣襯著肌膚如雪蛛壳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天湿镀,我揣著相機與錄音炕吸,去河邊找鬼。 笑死勉痴,一個胖子當(dāng)著我的面吹牛赫模,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒸矛,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼瀑罗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雏掠?” 一聲冷哼從身側(cè)響起斩祭,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乡话,沒想到半個月后摧玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡绑青,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年诬像,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闸婴。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡坏挠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邪乍,到底是詐尸還是另有隱情降狠,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布庇楞,位于F島的核電站榜配,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吕晌。R本人自食惡果不足惜芥牌,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聂使。 院中可真熱鬧壁拉,春花似錦、人聲如沸柏靶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屎蜓。三九已至痘昌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炬转,已是汗流浹背辆苔。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扼劈,地道東北人驻啤。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像荐吵,于是被迫代替她去往敵國和親骑冗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容