|
2 | 2 |
|
3 | 3 | namespace Tests; |
4 | 4 |
|
| 5 | +use Illuminate\Auth\RequestGuard; |
5 | 6 | use Illuminate\Contracts\Hashing\Hasher; |
6 | 7 | use Illuminate\Contracts\Routing\Registrar; |
7 | 8 | use Illuminate\Support\Facades\Auth; |
| 9 | +use Illuminate\Support\Facades\Cache; |
8 | 10 | use Illuminate\Support\Str; |
9 | 11 | use Laravel\Passport\Client; |
10 | 12 | use Laravel\Passport\ClientRepository; |
| 13 | +use Laravel\Passport\TokenRepository; |
11 | 14 |
|
12 | 15 | class FeatureTest extends TestCase |
13 | 16 | { |
@@ -54,43 +57,65 @@ public function test_it_can_cache_token() |
54 | 57 | $user->password = $this->app->make(Hasher::class)->make($password); |
55 | 58 | $user->save(); |
56 | 59 |
|
| 60 | + $tokenRepository = app(TokenRepository::class); |
| 61 | + |
57 | 62 | /** @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'); |
59 | 64 |
|
60 | 65 | /** @var Registrar $router */ |
61 | 66 | $router = $this->app->make(Registrar::class); |
62 | 67 |
|
63 | | - $token = $user->createToken('test')->accessToken; |
| 68 | + $accessToken = $user->createToken('test')->accessToken; |
64 | 69 |
|
65 | 70 | $router->get('/foo', function () { |
66 | 71 | return 'bar'; |
67 | 72 | })->middleware('auth:api'); |
68 | 73 |
|
69 | | - $query = $this->getQueryLog(function () use ($token, $user, $router) { |
| 74 | + $query = $this->getQueryLog(function () use ($accessToken, $user, $router) { |
70 | 75 | $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'); |
72 | 77 | }); |
73 | 78 |
|
74 | 79 | $this->assertCount(3, $query); |
75 | 80 |
|
76 | 81 | // token cached |
77 | | - $query = $this->getQueryLog(function () use ($token, $user, $router) { |
| 82 | + $query = $this->getQueryLog(function () use ($accessToken, $user, $router) { |
78 | 83 | $router->get('/me', function () { |
79 | 84 | return Auth::user(); |
80 | 85 | })->middleware('auth:api'); |
81 | 86 |
|
82 | | - $this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/me')->assertSuccessful()->assertJsonFragment([ |
| 87 | + $this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertSuccessful()->assertJsonFragment([ |
83 | 88 | 'id' => $user->id, |
84 | 89 | 'email' => $user->email, |
85 | 90 | ]); |
86 | 91 |
|
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(); |
91 | 96 | }); |
92 | 97 |
|
93 | 98 | $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(); |
94 | 119 | } |
95 | 120 |
|
96 | 121 | protected function getQueryLog(\Closure $callback): \Illuminate\Support\Collection |
|
0 commit comments