Skip to content

Commit 30cceb4

Browse files
committed
Fixed #8
1 parent c2a8d3a commit 30cceb4

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

src/CacheTokenRepository.php

+7
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,11 @@ public function store(): Repository
135135

136136
return $store instanceof TaggableStore ? $store->tags($this->cacheTags) : $store;
137137
}
138+
139+
public function revokeAccessToken($id)
140+
{
141+
parent::revokeAccessToken($id);
142+
143+
$this->store()->forget($this->itemKey($id));
144+
}
138145
}

tests/FeatureTest.php

+35-10
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
namespace Tests;
44

5+
use Illuminate\Auth\RequestGuard;
56
use Illuminate\Contracts\Hashing\Hasher;
67
use Illuminate\Contracts\Routing\Registrar;
78
use Illuminate\Support\Facades\Auth;
9+
use Illuminate\Support\Facades\Cache;
810
use Illuminate\Support\Str;
911
use Laravel\Passport\Client;
1012
use Laravel\Passport\ClientRepository;
13+
use Laravel\Passport\TokenRepository;
1114

1215
class FeatureTest extends TestCase
1316
{
@@ -54,43 +57,65 @@ public function test_it_can_cache_token()
5457
$user->password = $this->app->make(Hasher::class)->make($password);
5558
$user->save();
5659

60+
$tokenRepository = app(TokenRepository::class);
61+
5762
/** @var Client $client */
58-
app(ClientRepository::class)->createPersonalAccessClient($user->id, 'Personal Token Client', 'http://localhost');
63+
$client = app(ClientRepository::class)->createPersonalAccessClient($user->id, 'Personal Token Client', 'http://localhost');
5964

6065
/** @var Registrar $router */
6166
$router = $this->app->make(Registrar::class);
6267

63-
$token = $user->createToken('test')->accessToken;
68+
$accessToken = $user->createToken('test')->accessToken;
6469

6570
$router->get('/foo', function () {
6671
return 'bar';
6772
})->middleware('auth:api');
6873

69-
$query = $this->getQueryLog(function () use ($token, $user, $router) {
74+
$query = $this->getQueryLog(function () use ($accessToken, $user, $router) {
7075
$this->getJson('/foo')->assertStatus(401);
71-
$this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/foo')->assertSuccessful()->assertSee('bar');
76+
$this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/foo')->assertSuccessful()->assertSee('bar');
7277
});
7378

7479
$this->assertCount(3, $query);
7580

7681
// token cached
77-
$query = $this->getQueryLog(function () use ($token, $user, $router) {
82+
$query = $this->getQueryLog(function () use ($accessToken, $user, $router) {
7883
$router->get('/me', function () {
7984
return Auth::user();
8085
})->middleware('auth:api');
8186

82-
$this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/me')->assertSuccessful()->assertJsonFragment([
87+
$this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertSuccessful()->assertJsonFragment([
8388
'id' => $user->id,
8489
'email' => $user->email,
8590
]);
8691

87-
$this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/me')->assertOk();
88-
$this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/me')->assertOk();
89-
$this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/me')->assertOk();
90-
$this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/me')->assertOk();
92+
$this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertOk();
93+
$this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertOk();
94+
$this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertOk();
95+
$this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertOk();
9196
});
9297

9398
$this->assertCount(0, $query);
99+
100+
101+
// revoke token
102+
$token = $tokenRepository->findValidToken($user, $client);
103+
$this->assertTrue(Cache::has(app(TokenRepository::class)->itemKey($token->id)));
104+
105+
$tokenRepository->revokeAccessToken($token->id);
106+
$token->refresh();
107+
$this->assertTrue($token->revoked);
108+
109+
$this->assertFalse(Cache::has($tokenRepository->itemKey($token->id)));
110+
111+
// logout
112+
RequestGuard::macro('logout', function () {
113+
$this->user = null;
114+
});
115+
Auth::guard('api')->logout();
116+
117+
// request with revoked token
118+
$this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertUnauthorized();
94119
}
95120

96121
protected function getQueryLog(\Closure $callback): \Illuminate\Support\Collection

0 commit comments

Comments
 (0)