2016-11-23 49 views
0

我添加了這兩個事件偵聽器以我:EventServiceProviderlaravel護照吊銷剪枝事件偵聽器沒有做任何事情

/** 
* The event listener mappings for the application. 
* 
* @var array 
*/ 
protected $listen = [ 
    'Laravel\Passport\Events\AccessTokenCreated' => [ 
     'App\Listeners\RevokeOldTokens', 
    ], 

    'Laravel\Passport\Events\RefreshTokenCreated' => [ 
     'App\Listeners\PruneOldTokens', 
    ], 
]; 

在我AuthServiceProvider我:

public function boot() 
    { 
     $this->registerPolicies(); 

     Passport::routes(); 
     passport::$revokeOtherTokens; 
     passport::$pruneRevokedTokens; 
     Passport::tokensExpireIn(Carbon::now()->addDays(1)); 
     Passport::refreshTokensExpireIn(Carbon::now()->addDays(2)); 

    } 

我想護照撤銷所有其他用戶訪問令牌,然後修剪它們,如果它們被撤銷。但沒有任何事情發生,並且每次我向郵遞員請求訪問令牌時,我都會得到一個新的訪問令牌,同時數據庫中有多個訪問令牌。

+0

您是否在'app \ Listeners'中創建了適當的類?這些不是出來的,你必須自己寫。 – Skysplit

+0

@Skysplit謝謝你的提示。我解決了我的問題,你可以在下面看到我的答案。 –

回答

2

我解決我的問題是這樣的:第一步 - 在EventServiceProvider應的路徑更改爲訪問令牌createdn也刷新令牌創建:

protected $listen = [ 
     'Laravel\Passport\Events\AccessTokenCreated' => [ 
      'App\Listeners\RevokeOldTokens', 
     ], 

     'Laravel\Passport\Events\RefreshTokenCreated' => [ 
      'App\Listeners\PruneOldTokens', 
     ], 
    ]; 

Step2-產生這兩監聽事件:

php artisan event:generate 

Step3-修改AccessTokenCreated & RefreshTokenCreated事件處理方法:

RevokeOldTokens類:

namespace App\Listeners; 

use Laravel\Passport\Events\AccessTokenCreated; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use DB; 

class RevokeOldTokens 
{ 
    /** 
    * Create the event listener. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     // 
    } 

    /** 
    * Handle the event. 
    * 
    * @param AccessTokenCreated $event 
    * @return void 
    */ 
    public function handle(AccessTokenCreated $event) 
    { 


     DB::table('oauth_access_tokens') 
      ->where('id', '<>', $event->tokenId) 
      ->where('user_id', $event->userId) 
      ->where('client_id', $event->clientId) 
      ->update(['revoked' => true]); 


    } 
} 

PruneOldTokens類:

namespace App\Listeners; 

use Laravel\Passport\Events\RefreshTokenCreated; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use DB; 

class PruneOldTokens 
{ 
    /** 
    * Create the event listener. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     // 
    } 

    /** 
    * Handle the event. 
    * 
    * @param RefreshTokenCreated $event 
    * @return void 
    */ 
    public function handle(RefreshTokenCreated $event) 
    { 

     DB::table('oauth_refresh_tokens') 
      ->where('id', '<>', $event->refreshTokenId) 
      ->where('access_token_id', '<>', $event->accessTokenId) 
      ->update(['revoked' => true]); 

    } 
} 

後此步驟,如果我發送任何請求,我的項目,將檢查令牌,如果有另一個標記,它會取消它,讓它變得無聊。

1

可能是因爲你錯過了你的config/app.php Laravel \護照\ PassportServiceProvider ::類的供應商陣列中的一些重要的事情,讓護照作品發現,

1-註冊Passport服務提供商,

1 - 您必須將Laravel \護照\ HasApiTokens特徵添加到您的應用程序\ User模型 2 - 在你的配置/ auth.php配置文件,你應該在API認證後衛的驅動程序選項設置爲護照

檢查這個 http://www.snippetcase.com/snippet/61/API+Authentication+(Passport)+Laravel+5.3

+0

感謝您的回覆,但我已經完成了這些步驟。 –