|
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