如何检索Laravel Passport访问令牌的有效期限或日期时间?

时间:2018-08-02 20:22:38

标签: laravel laravel-5.4 laravel-passport

我正在使用Laravel 5.4和Passport4。我只想只使用First-Party-App。因此,根据此Add Firebase to Android Project的建议,我想避免将ClientID和ClientSecret放入应用程序中。我已经输入了boot()的{​​{1}}方法:

AuthServiceProvider

我在Passport::routes(); Passport::tokensExpireIn(Carbon::now()->addDays(30)); Passport::refreshTokensExpireIn(Carbon::now()->addDays(60)); 中添加了自己的路线,以接受来自App的登录:

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); } (30天=> 2592000s)的秒数或日期时间,以便我可以自动进行计算?

2 个答案:

答案 0 :(得分:3)

这是我设法从对象中获取它的方法:

正如Tim Lewis在评论中指出的那样,有一个$ token属性,$user->createToken('API Access')是一个Laravel\Passport\PersonalAccessTokenResult对象,其中包含2个公共属性:$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()中使用这两行:

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

因为它不会根据此Laravel Passport Issue用Laravel 5.4的密码授予类型中的Personal Access Token替换过期。

答案 1 :(得分:0)

<?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
              );
    }

    //...
}
//...