首頁 >php框架 >Laravel >分享Laravel Passport 踩坑日記

分享Laravel Passport 踩坑日記

藏色散人
藏色散人轉載
2020-09-07 09:13:073152瀏覽

以前的專案大多使用 DingoAPI JWT-auth 實現的 API 認證,Laravel 雖然在很早就出了 Passport ,但一直沒有怎麼關注。 今天擼了一把Passport ,雖然遇到不少坑,但是趕腳這個東西還是蠻好用的~

分享Laravel Passport 踩坑日記坑1:我暫時只想透過帳號密碼取得

token


Passport 一出生就自帶了很多的路由。 。 but,這些東東大部分對我是真的沒用啊解決方案:在你的AuthServiceProvider  裡重新定義:
Passport::routes(function (RouteRegistrar $router) {
            $router->forAccessTokens();
        }, ['prefix' => 'api']);


# : 註冊帳號時,如何手動產生
Token ?

jwt-auth 的JWTAuth::fromUser($user); 可以很簡單的產生token,但在Passport 裡似乎沒有現成的方法。

解決方案:

註冊完帳號後,再一次主動請求 oauth/token<pre class="brush:php;toolbar:false;">public function register(Request $request) { $validator = $this-&gt;validator($request-&gt;all()); if ($validator-&gt;fails()){ return response()-&gt;json($validator-&gt;errors()); } event(new Registered($user = $this-&gt;create($request-&gt;all()))); $client = \DB::table(&amp;#39;oauth_clients&amp;#39;)-&gt;where(&amp;#39;password_client&amp;#39;, 1)-&gt;first(); $request-&gt;request-&gt;add([ &amp;#39;username&amp;#39; =&gt; $user-&gt;email, &amp;#39;password&amp;#39; =&gt; $request-&gt;password, &amp;#39;grant_type&amp;#39; =&gt; &amp;#39;password&amp;#39;, &amp;#39;client_id&amp;#39; =&gt; $client-&gt;id, &amp;#39;client_secret&amp;#39; =&gt; $client-&gt;secret, &amp;#39;scope&amp;#39; =&gt; &amp;#39;*&amp;#39; ]); $proxy = Request::create( &amp;#39;oauth/token&amp;#39;, &amp;#39;POST&amp;#39; ); return Route::dispatch($proxy); }</pre>執行,獲得回傳

{
  "token_type": "Bearer",
  "expires_in": 1296000,
  "access_token": "xxx",
  "refresh_token": "xxx"
}

完美解決。

坑3:我想要使用手機號登入

Passport 其實已經提供了動態修改使用者登入的接口,只不過沒有在文件裡寫出來

解決方案:

在你的User Model 裡增加如下方法
public function findForPassport($login) {
        return User::orWhere(&#39;email&#39;, $login)->orWhere(&#39;mobile&#39;, $login)->first();
    }

坑4: 當使用錯誤的

token
時, passport 總是會跳到login 方法

查看原始碼發現passport 用的是web auth 中間件,難怪如此

在你的請求頭裡增加

Accept: application/json ,問題解決例如:

以上是分享Laravel Passport 踩坑日記的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除