| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- <?php
- namespace Illuminate\Tests\Auth;
- use Illuminate\Auth\TokenGuard;
- use Illuminate\Contracts\Auth\UserProvider;
- use Illuminate\Http\Request;
- use Mockery as m;
- use PHPUnit\Framework\TestCase;
- class AuthTokenGuardTest extends TestCase
- {
- protected function tearDown(): void
- {
- m::close();
- }
- public function testUserCanBeRetrievedByQueryStringVariable()
- {
- $provider = m::mock(UserProvider::class);
- $user = new AuthTokenGuardTestUser;
- $user->id = 1;
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['api_token' => 'foo'])->andReturn($user);
- $request = Request::create('/', 'GET', ['api_token' => 'foo']);
- $guard = new TokenGuard($provider, $request);
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- $this->assertTrue($guard->check());
- $this->assertFalse($guard->guest());
- $this->assertSame(1, $guard->id());
- }
- public function testTokenCanBeHashed()
- {
- $provider = m::mock(UserProvider::class);
- $user = new AuthTokenGuardTestUser;
- $user->id = 1;
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['api_token' => hash('sha256', 'foo')])->andReturn($user);
- $request = Request::create('/', 'GET', ['api_token' => 'foo']);
- $guard = new TokenGuard($provider, $request, 'api_token', 'api_token', $hash = true);
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- $this->assertTrue($guard->check());
- $this->assertFalse($guard->guest());
- $this->assertSame(1, $guard->id());
- }
- public function testUserCanBeRetrievedByAuthHeaders()
- {
- $provider = m::mock(UserProvider::class);
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['api_token' => 'foo'])->andReturn((object) ['id' => 1]);
- $request = Request::create('/', 'GET', [], [], [], ['PHP_AUTH_USER' => 'foo', 'PHP_AUTH_PW' => 'foo']);
- $guard = new TokenGuard($provider, $request);
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- }
- public function testUserCanBeRetrievedByBearerToken()
- {
- $provider = m::mock(UserProvider::class);
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['api_token' => 'foo'])->andReturn((object) ['id' => 1]);
- $request = Request::create('/', 'GET', [], [], [], ['HTTP_AUTHORIZATION' => 'Bearer foo']);
- $guard = new TokenGuard($provider, $request);
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- }
- public function testValidateCanDetermineIfCredentialsAreValid()
- {
- $provider = m::mock(UserProvider::class);
- $user = new AuthTokenGuardTestUser;
- $user->id = 1;
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['api_token' => 'foo'])->andReturn($user);
- $request = Request::create('/', 'GET', ['api_token' => 'foo']);
- $guard = new TokenGuard($provider, $request);
- $this->assertTrue($guard->validate(['api_token' => 'foo']));
- }
- public function testValidateCanDetermineIfCredentialsAreInvalid()
- {
- $provider = m::mock(UserProvider::class);
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['api_token' => 'foo'])->andReturn(null);
- $request = Request::create('/', 'GET', ['api_token' => 'foo']);
- $guard = new TokenGuard($provider, $request);
- $this->assertFalse($guard->validate(['api_token' => 'foo']));
- }
- public function testValidateIfApiTokenIsEmpty()
- {
- $provider = m::mock(UserProvider::class);
- $request = Request::create('/', 'GET', ['api_token' => '']);
- $guard = new TokenGuard($provider, $request);
- $this->assertFalse($guard->validate(['api_token' => '']));
- }
- public function testItAllowsToPassCustomRequestInSetterAndUseItForValidation()
- {
- $provider = m::mock(UserProvider::class);
- $user = new AuthTokenGuardTestUser;
- $user->id = 1;
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['api_token' => 'custom'])->andReturn($user);
- $request = Request::create('/', 'GET', ['api_token' => 'foo']);
- $guard = new TokenGuard($provider, $request);
- $guard->setRequest(Request::create('/', 'GET', ['api_token' => 'custom']));
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- }
- public function testUserCanBeRetrievedByBearerTokenWithCustomKey()
- {
- $provider = m::mock(UserProvider::class);
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['custom_token_field' => 'foo'])->andReturn((object) ['id' => 1]);
- $request = Request::create('/', 'GET', [], [], [], ['HTTP_AUTHORIZATION' => 'Bearer foo']);
- $guard = new TokenGuard($provider, $request, 'custom_token_field', 'custom_token_field');
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- }
- public function testUserCanBeRetrievedByQueryStringVariableWithCustomKey()
- {
- $provider = m::mock(UserProvider::class);
- $user = new AuthTokenGuardTestUser;
- $user->id = 1;
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['custom_token_field' => 'foo'])->andReturn($user);
- $request = Request::create('/', 'GET', ['custom_token_field' => 'foo']);
- $guard = new TokenGuard($provider, $request, 'custom_token_field', 'custom_token_field');
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- $this->assertTrue($guard->check());
- $this->assertFalse($guard->guest());
- $this->assertSame(1, $guard->id());
- }
- public function testUserCanBeRetrievedByAuthHeadersWithCustomField()
- {
- $provider = m::mock(UserProvider::class);
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['custom_token_field' => 'foo'])->andReturn((object) ['id' => 1]);
- $request = Request::create('/', 'GET', [], [], [], ['PHP_AUTH_USER' => 'foo', 'PHP_AUTH_PW' => 'foo']);
- $guard = new TokenGuard($provider, $request, 'custom_token_field', 'custom_token_field');
- $user = $guard->user();
- $this->assertSame(1, $user->id);
- }
- public function testValidateCanDetermineIfCredentialsAreValidWithCustomKey()
- {
- $provider = m::mock(UserProvider::class);
- $user = new AuthTokenGuardTestUser;
- $user->id = 1;
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['custom_token_field' => 'foo'])->andReturn($user);
- $request = Request::create('/', 'GET', ['custom_token_field' => 'foo']);
- $guard = new TokenGuard($provider, $request, 'custom_token_field', 'custom_token_field');
- $this->assertTrue($guard->validate(['custom_token_field' => 'foo']));
- }
- public function testValidateCanDetermineIfCredentialsAreInvalidWithCustomKey()
- {
- $provider = m::mock(UserProvider::class);
- $provider->shouldReceive('retrieveByCredentials')->once()->with(['custom_token_field' => 'foo'])->andReturn(null);
- $request = Request::create('/', 'GET', ['custom_token_field' => 'foo']);
- $guard = new TokenGuard($provider, $request, 'custom_token_field', 'custom_token_field');
- $this->assertFalse($guard->validate(['custom_token_field' => 'foo']));
- }
- public function testValidateIfApiTokenIsEmptyWithCustomKey()
- {
- $provider = m::mock(UserProvider::class);
- $request = Request::create('/', 'GET', ['custom_token_field' => '']);
- $guard = new TokenGuard($provider, $request, 'custom_token_field', 'custom_token_field');
- $this->assertFalse($guard->validate(['custom_token_field' => '']));
- }
- }
- class AuthTokenGuardTestUser
- {
- public $id;
- public function getAuthIdentifier()
- {
- return $this->id;
- }
- }
|