Я создал свое собственное промежуточное программное обеспечение для проверки подлинности, которое принимает заголовок авторизации, который используется для запроса таблицы api_tokens
, чтобы найти соответствующий токен и истекает срок действия.Ошибка аутентификации в тесте RESTful
Это нормально работает при тестировании вручную, но автоматические тесты делают что-то странное. Мои тесты в основном выглядеть следующим образом:
public function testGetLocation()
{
$user = factory(\App\Models\User::class, 'userA')->create();
$token = factory(\App\Models\ApiToken::class, 'userA-token')-create();
$location = factory(\App\Models\Location::class, 'userA-location1')->create();
$this->json('GET', '/api/location/'.$location->id, [], ['Authorization' => 'Bearer '. $token->token])
->assertStatus(200);
}
Однако, когда я запускаю тест я получаю ошибку 500 о том, что столбец users.api_token
не существует. Я удалил этот столбец из таблицы пользователя, поскольку он больше не требуется. Если я верну его обратно, я не получаю сообщение об ошибке, но тестовый пользователь не может аутентифицироваться. Очевидно, что Laravel или phpunit каким-то образом игнорируют auth, который я пытаюсь использовать. Я не вижу, где.
После поиска в Google я пробовал другие вещи, такие как добавление actingAs($user)
и $this->be()
, но это не помогло.
Любые предложения?
Edit: Бревно показать MySQL, что этот запрос выполняется:
select * from `users` where `api_token` = 'userA-token' limit 1
Laravel не следует искать в api_token в таблице пользователей. Это не результат моего кода, поэтому я потерян.
Edit 2: My routes/api.php
выглядит следующим образом:
Route::group([
'prefix' => 'api',
//'middleware' => 'auth:api'
'middleware' => 'ApiTokenAuthentication',
], function() {
Это определенно называют, потому что я может выводить вары здесь во время испытаний. Но кажется, что стандартное auth также называется, несмотря на то, что оно не включено нигде в маршруты.
вы пробовали 'AUTH() -> Логин ($ пользователь) 'глобальная функция? –
У меня сейчас нет изменений. Спасибо хоть. – Dubby