以前的專案大多使用 DingoAPI JWT-auth 實現的 API 認證,Laravel 雖然在很早就出了 Passport ,但一直沒有怎麼關注。 今天擼了一把Passport ,雖然遇到不少坑,但是趕腳這個東西還是蠻好用的~
坑1:我暫時只想透過帳號密碼取得
token在你的
AuthServiceProvider 裡重新定義:Passport::routes(function (RouteRegistrar $router) { $router->forAccessTokens(); }, ['prefix' => 'api']);
# : 註冊帳號時,如何手動產生
Token ?
可以很簡單的產生
token,但在Passport 裡似乎沒有現成的方法。 註冊完帳號後,再一次主動請求 oauth/token
<pre class="brush:php;toolbar:false;">public function register(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails()){
return response()->json($validator->errors());
}
event(new Registered($user = $this->create($request->all())));
$client = \DB::table(&#39;oauth_clients&#39;)->where(&#39;password_client&#39;, 1)->first();
$request->request->add([
&#39;username&#39; => $user->email,
&#39;password&#39; => $request->password,
&#39;grant_type&#39; => &#39;password&#39;,
&#39;client_id&#39; => $client->id,
&#39;client_secret&#39; => $client->secret,
&#39;scope&#39; => &#39;*&#39;
]);
$proxy = Request::create(
&#39;oauth/token&#39;,
&#39;POST&#39;
);
return Route::dispatch($proxy);
}</pre>
執行,獲得回傳
{ "token_type": "Bearer", "expires_in": 1296000, "access_token": "xxx", "refresh_token": "xxx" }
坑3:我想要使用手機號登入
Passport 其實已經提供了動態修改使用者登入的接口,只不過沒有在文件裡寫出來
解決方案:public function findForPassport($login) { return User::orWhere('email', $login)->orWhere('mobile', $login)->first(); }
token
時, passport 總是會跳到login 方法
auth 中間件,難怪如此Accept: application/json ,問題解決
例如:
以上是分享Laravel Passport 踩坑日記的詳細內容。更多資訊請關注PHP中文網其他相關文章!