laravel 护照撤销和修剪事件侦听器未执行任何操作
laravel passport revoke and prune event listener is not doing anything
我已经将这两个事件侦听器添加到我的:EventServiceProvider
/**
* 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));
}
我希望 passport 撤销所有其他用户访问令牌,然后在它们被撤销时删除它们。但是什么也没有发生,每次我从邮递员那里请求访问令牌时,我都会得到一个新的访问令牌,而数据库中有多个访问令牌。
可能是因为你遗漏了一些重要的东西让护照作品找到,
1- 在您的 config/app.php 的 providers 数组中注册 Passport 服务提供商
Laravel\Passport\PassportServiceProvider::class,
1- 您必须将 Laravel\Passport\HasApiTokens 特征添加到您的 App\User 模型
2- 在你的 config/auth.php 配置文件中,你应该将 api 身份验证保护的驱动程序选项设置为 passport
检查这个
http://www.snippetcase.com/snippet/61/API+Authentication+(Passport)+Laravel+5.3
我已经通过这种方式解决了我的问题:
第 1 步 - 在 EventServiceProvider
中应更改创建的访问令牌的路径并刷新创建的令牌:
protected $listen = [
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\RevokeOldTokens',
],
'Laravel\Passport\Events\RefreshTokenCreated' => [
'App\Listeners\PruneOldTokens',
],
];
Step2- 生成这两个侦听器事件:
php artisan event:generate
Step3- 修改AccessTokenCreated
& RefreshTokenCreated
事件句柄方法:
撤销旧代币 Class :
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 Class :
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]);
}
}
在执行此步骤后,如果我向我的项目发送任何请求,它将检查令牌,如果有另一个令牌,它将撤销它并使其取消授权。
我也在问同样的问题!
我也做了同样的事情,这也是 :
$id = $request->user()->id ?? -1;
$token = Token::where('user_id', $id)->get();
foreach ($token as $t) {
$tokenRepository = app(TokenRepository::class);
$refreshTokenRepository = app(RefreshTokenRepository::class);
if (isset($t)) {
$tokenRepository->revokeAccessToken($t->id);
$refreshTokenRepository->revokeRefreshTokensByAccessTokenId($t->id);
}
RefreshToken::where('access_token_id', $t->id)->delete();
$t->delete();
}
我已经将这两个事件侦听器添加到我的:EventServiceProvider
/**
* 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));
}
我希望 passport 撤销所有其他用户访问令牌,然后在它们被撤销时删除它们。但是什么也没有发生,每次我从邮递员那里请求访问令牌时,我都会得到一个新的访问令牌,而数据库中有多个访问令牌。
可能是因为你遗漏了一些重要的东西让护照作品找到,
1- 在您的 config/app.php 的 providers 数组中注册 Passport 服务提供商 Laravel\Passport\PassportServiceProvider::class,
1- 您必须将 Laravel\Passport\HasApiTokens 特征添加到您的 App\User 模型 2- 在你的 config/auth.php 配置文件中,你应该将 api 身份验证保护的驱动程序选项设置为 passport
检查这个 http://www.snippetcase.com/snippet/61/API+Authentication+(Passport)+Laravel+5.3
我已经通过这种方式解决了我的问题:
第 1 步 - 在 EventServiceProvider
中应更改创建的访问令牌的路径并刷新创建的令牌:
protected $listen = [
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\RevokeOldTokens',
],
'Laravel\Passport\Events\RefreshTokenCreated' => [
'App\Listeners\PruneOldTokens',
],
];
Step2- 生成这两个侦听器事件:
php artisan event:generate
Step3- 修改AccessTokenCreated
& RefreshTokenCreated
事件句柄方法:
撤销旧代币 Class :
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 Class :
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]);
}
}
在执行此步骤后,如果我向我的项目发送任何请求,它将检查令牌,如果有另一个令牌,它将撤销它并使其取消授权。
我也在问同样的问题! 我也做了同样的事情,这也是 :
$id = $request->user()->id ?? -1;
$token = Token::where('user_id', $id)->get();
foreach ($token as $t) {
$tokenRepository = app(TokenRepository::class);
$refreshTokenRepository = app(RefreshTokenRepository::class);
if (isset($t)) {
$tokenRepository->revokeAccessToken($t->id);
$refreshTokenRepository->revokeRefreshTokensByAccessTokenId($t->id);
}
RefreshToken::where('access_token_id', $t->id)->delete();
$t->delete();
}