|
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; |
8 | 9 | use Illuminate\Support\Str; |
9 | 10 | use Laravel\Passport\Client; |
10 | 11 | use Laravel\Passport\ClientRepository; |
| 12 | +use Laravel\Passport\TokenRepository; |
11 | 13 |
|
12 | 14 | class FeatureTest extends TestCase |
13 | 15 | { |
@@ -54,43 +56,65 @@ public function test_it_can_cache_token() |
54 | 56 | $user->password = $this->app->make(Hasher::class)->make($password); |
55 | 57 | $user->save(); |
56 | 58 |
|
| 59 | + $tokenRepository = app(TokenRepository::class); |
| 60 | + |
57 | 61 | /** @var Client $client */ |
58 | | - app(ClientRepository::class)->createPersonalAccessClient($user->id, 'Personal Token Client', 'http://localhost'); |
| 62 | + $client = app(ClientRepository::class)->createPersonalAccessClient($user->id, 'Personal Token Client', 'http://localhost'); |
59 | 63 |
|
60 | 64 | /** @var Registrar $router */ |
61 | 65 | $router = $this->app->make(Registrar::class); |
62 | 66 |
|
63 | | - $token = $user->createToken('test')->accessToken; |
| 67 | + $accessToken = $user->createToken('test')->accessToken; |
64 | 68 |
|
65 | 69 | $router->get('/foo', function () { |
66 | 70 | return 'bar'; |
67 | 71 | })->middleware('auth:api'); |
68 | 72 |
|
69 | | - $query = $this->getQueryLog(function () use ($token, $user, $router) { |
| 73 | + $query = $this->getQueryLog(function () use ($accessToken, $user, $router) { |
70 | 74 | $this->getJson('/foo')->assertStatus(401); |
71 | | - $this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/foo')->assertSuccessful()->assertSee('bar'); |
| 75 | + $this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/foo')->assertSuccessful()->assertSee('bar'); |
72 | 76 | }); |
73 | 77 |
|
74 | 78 | $this->assertCount(3, $query); |
75 | 79 |
|
76 | 80 | // token cached |
77 | | - $query = $this->getQueryLog(function () use ($token, $user, $router) { |
| 81 | + $query = $this->getQueryLog(function () use ($accessToken, $user, $router) { |
78 | 82 | $router->get('/me', function () { |
79 | 83 | return Auth::user(); |
80 | 84 | })->middleware('auth:api'); |
81 | 85 |
|
82 | | - $this->withHeader('Authorization', 'Bearer ' . $token)->getJson('/me')->assertSuccessful()->assertJsonFragment([ |
| 86 | + $this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertSuccessful()->assertJsonFragment([ |
83 | 87 | 'id' => $user->id, |
84 | 88 | 'email' => $user->email, |
85 | 89 | ]); |
86 | 90 |
|
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(); |
| 91 | + $this->withHeader('Authorization', 'Bearer ' . $accessToken)->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(); |
91 | 95 | }); |
92 | 96 |
|
93 | 97 | $this->assertCount(0, $query); |
| 98 | + |
| 99 | + |
| 100 | + // revoke token |
| 101 | + $token = $tokenRepository->findValidToken($user, $client); |
| 102 | + $this->assertTrue($tokenRepository->cacheStore()->has(app(TokenRepository::class)->itemKey($token->id))); |
| 103 | + |
| 104 | + $tokenRepository->revokeAccessToken($token->id); |
| 105 | + $token->refresh(); |
| 106 | + $this->assertTrue($token->revoked); |
| 107 | + |
| 108 | + $this->assertFalse($tokenRepository->cacheStore()->has($tokenRepository->itemKey($token->id))); |
| 109 | + |
| 110 | + // logout |
| 111 | + RequestGuard::macro('logout', function () { |
| 112 | + $this->user = null; |
| 113 | + }); |
| 114 | + Auth::guard('api')->logout(); |
| 115 | + |
| 116 | + // request with revoked token |
| 117 | + $this->withHeader('Authorization', 'Bearer ' . $accessToken)->getJson('/me')->assertUnauthorized(); |
94 | 118 | } |
95 | 119 |
|
96 | 120 | protected function getQueryLog(\Closure $callback): \Illuminate\Support\Collection |
|
0 commit comments