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

分享Laravel Passport 踩坑日記

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

以前的專案大多使用 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

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('oauth_clients')->where('password_client', 1)->first();

        $request->request->add([
            'username' => $user->email,
            'password' => $request->password,
            'grant_type' => 'password',
            'client_id' => $client->id,
            'client_secret' => $client->secret,
            'scope' => '*'
        ]);

        $proxy = Request::create(
            'oauth/token',
            'POST'
        );

        return Route::dispatch($proxy);
    }
執行,獲得回傳
{
  "token_type": "Bearer",
  "expires_in": 1296000,
  "access_token": "xxx",
  "refresh_token": "xxx"
}

完美解決。

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

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

解決方案:

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

坑4: 當使用錯誤的

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

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

在你的請求頭裡增加

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

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

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