Почему Laravel не работает должным образом? - PullRequest
0 голосов
/ 17 июня 2020

При попытке проверить, видит ли пользователь некоторую статистику, я получаю странные результаты в http-кодах

Вот код, который не работает

public function testUserCanAnalyze()
{
    factory(Game::class, 5)->create();

    $user = factory(User::class)->create();
    $nums = factory(UserGame::class)->create([
        'user_id' => $user->id,
    ]);

    //dd($user->id, $nums->id, $nums->user_id);
    // displays 1 1 1

    $response = $this->actingAs($user)->get('game/analyze/' . $nums->id); //this gives a 403, WHY?
    // $response = $this->get('game/analyze/' . $nums->id); //this gives a 302, LOOKS GOOD

    $response->assertStatus(200);
}

Вместо получая 200, я получаю 403. Я думаю, что все идентификаторы верны

Если я заменю эту строку на

$response = $this->actingAs($user)->get('account');

, я получу правильный результат 200. Ручное тестирование URL-адреса работает, и если Я делаю это без идентификатора (см. Ниже). Я получаю правильный 404

$response = $this->actingAs($user)->get('game/analyze/');

Есть идеи, что мне не хватает?

Мои маршруты:

Route::get('account', 'UserAccountController@index')->name('account')->middleware('auth');

Route::get('game/analyze/{id}', 'GameController@analyzeUserNumbers')->middleware('auth');
//Route::get('game/analyze/{draw}', 'GameController@analyzeUserNumbers')->name('game.analyze')->middleware('auth');

Спасибо

1 Ответ

0 голосов
/ 17 июня 2020

Исправлено изменением с! == на! = В контроллере Похоже, что $ game имеет все идентификаторы как строку, а не как int

if (Auth::user()->id != $game->user_id) {
            abort(403, 'Unauthorized action.');
        }
...