1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
<?php
namespace Illuminate\Tests\Integration\Auth\ApiAuthenticationWithEloquentTest;
use Illuminate\Database\QueryException;
use Illuminate\Foundation\Auth\User as FoundationUser;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;
use Orchestra\Testbench\TestCase;
/**
* @requires extension pdo_mysql
*/
class ApiAuthenticationWithEloquentTest extends TestCase
{
protected function getEnvironmentSetUp($app)
{
$app['config']->set('app.debug', 'true');
// Auth configuration
$app['config']->set('auth.defaults.guard', 'api');
$app['config']->set('auth.providers.users.model', User::class);
// Database configuration
$app['config']->set('database.default', 'testbench');
$app['config']->set('database.connections.testbench', [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'username' => 'root',
'password' => 'invalid-credentials',
'database' => 'forge',
'prefix' => '',
]);
}
public function testAuthenticationViaApiWithEloquentUsingWrongDatabaseCredentialsShouldNotCauseInfiniteLoop()
{
Route::get('/auth', function () {
return 'success';
})->middleware('auth:api');
$this->expectException(QueryException::class);
$this->expectExceptionMessage("Access denied for user 'root'@");
try {
$this->withoutExceptionHandling()->get('/auth', ['Authorization' => 'Bearer whatever']);
} catch (QueryException $e) {
if (Str::startsWith($e->getMessage(), 'SQLSTATE[HY000] [2002]')) {
$this->markTestSkipped('MySQL instance required.');
}
throw $e;
}
}
}
class User extends FoundationUser
{
//
}
|