web-dev-qa-db-ja.com

Laravelパスポートアクセストークンの有効期限または日時を取得する方法は?

Laravel 5.4とパスポート4を使用しています。_First-Party-App_のみを使用したいので、これから示唆されるように answer 、離れたいClientIDとClientSecretをアプ​​リに配置することから。AuthServiceProviderboot()メソッドを配置しました。

_Passport::routes();
Passport::tokensExpireIn(Carbon::now()->addDays(30));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(60));
_

アプリからのログインを受け入れるために、_api.php_に独自のルートを追加しました:

_Route::post('login', 'Auth\LoginController@apiLogin');
_

これは私の行動です:

_public function apiLogin(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        // Authentication passed...
        $user = Auth::user();
        $token = $user->createToken('API Access')->accessToken;

        return response()->json(["token_type" =>"Bearer","expires_in" => 2592000,"access_token" => $token]);
    }

    return response()->json(["error" => "invalid_credentials", "message" => "The user credentials were incorrect."], 401);
}
_

_expires_in_(30日=> 2592000s)の秒数、または日時を取得して自動的に計算できるようにする方法はありますか?

3
KeitelDOG

これが私がオブジェクトからそれを取得する方法です:

ティムルイスがコメントで私に指摘したように、$ tokenプロパティがあります。$user->createToken('API Access')は2つのパブリックプロパティを含む_Laravel\Passport\PersonalAccessTokenResult_オブジェクトです:$accessToken (String)$token (Laravel\Passport\Token)。したがって、$objToken = $user->createToken('API Access');を使用してトークンを取得し、$expiration = $objToken->token->expires_at->diffInSeconds(Carbon::now());を使用して有効期限を秒単位で計算します。これが最終的なコードです:

_public function apiLogin(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        // Authentication passed...

        Passport::tokensExpireIn(Carbon::now()->addDays(30));
        Passport::refreshTokensExpireIn(Carbon::now()->addDays(60));

        $user = Auth::user();
        $objToken = $user->createToken('API Access');
        $strToken = $objToken->accessToken;

        $expiration = $objToken->token->expires_at->diffInSeconds(Carbon::now());

        return response()->json(["token_type" => "Bearer", "expires_in" => $expiration, "access_token" => $strToken]);
    }

    return response()->json(["error" => "invalid_credentials", "message" => "The user credentials were incorrect."], 401);
}
_

ただし、AuthServiceProvider boot()でこれらの2行を使用する場合は注意してください。

_Passport::tokensExpireIn(Carbon::now()->addDays(30));
Passport::refreshTokensExpireIn(Carbon::now()->addDays(60));
_

パスワード付与タイプLaravel 5.4これによると Laravelパスポートの問題 )のパーソナルアクセストークンで有効期限が置き換えられないため。

2
KeitelDOG
<?php
//...
use Laravel\Passport\Bridge\PersonalAccessGrant;
use League\OAuth2\Server\AuthorizationServer;
//...

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     */
    public function boot()
    {
        // http://php.net/manual/zh/dateinterval.construct.php
        $lifetime = new \DateInterval('P1W');

        $this->app->get(AuthorizationServer::class)
              ->enableGrantType(
                 new PersonalAccessGrant(), 
                 $lifetime
              );
    }

    //...
}
//...
0
overtrue