Auth :: user () пуст в новом маршруте - PullRequest
0 голосов
/ 01 ноября 2019

Я использую Laravel 6 и имею 2 маршрута в моем приложении;указатель и панель приборов. Мой routes/web:

Auth::routes();
Route::middleware(['auth'])->group(function () {
    Route::get('/index', 'todoApp\TodoController@index')->name('index');
    Route::get('/dashboard', 'todoApp\Dashboard@dashboard')->name('dashboard');
});

Я недавно добавил маршрут панели мониторинга. Auth::user() равно нулю, когда я выкидываю его на маршрут панели, но не в индексе. Что такое

Ответы [ 3 ]

0 голосов
/ 01 ноября 2019

Если вы запускаете команду php artisan make:auth. Неважно, где вы определяете, потому что это только определить auth route

Route::middleware(['auth'])->group(function () {
    Route::get('/index', 'todoApp\TodoController@index')->name('index');
    Route::get('/dashboard', 'todoApp\Dashboard@dashboard')->name('dashboard');
});
Auth::routes();
0 голосов
/ 01 ноября 2019

Ваш контроллер создается до запуска стека промежуточного программного обеспечения;так Laravel может узнать, какое промежуточное программное обеспечение вы установили через конструктор. Из-за этого у вас не будет доступа к аутентифицированному пользователю или сеансам на этом этапе. Пример:

public function __construct()
{
    $this->user = Auth::user(); // will always be null
}

Если вам нужно назначить такую ​​переменную или получить доступ к информации такого типа, вам потребуется использовать промежуточное ПО контроллера, которое будет работать в стеке после промежуточного ПО StartSession:

public function __construct()
{
    $this->middleware(function ($request, $next) {
        // this is getting executed later after the other middleware has ran
        $this->user = Auth::user();

        return $next($request);
    });
}

Когда вызывается метод dashboard, стек промежуточного программного обеспечения уже полностью прошел запрос до конца стека, поэтому все промежуточное программное обеспечение, необходимое для функционирования и доступности Auth, уже работает наэта точка, поэтому у вас есть доступ к Auth::user() там.

0 голосов
/ 01 ноября 2019

Я думаю, что это как-то связано с промежуточным программным обеспечением «сети». Если вы загляните в Kernel.php (в app \ Http), вы найдете группу веб-промежуточного программного обеспечения.

Это покажет вам, что на самом деле он вызывает промежуточное программное обеспечение с именем StartSession. Основываясь на вашем файле маршрута (где веб не включен в качестве промежуточного программного обеспечения), я думаю, что у вас нет сеанса в вашем контроллере и нет доступа к нему.

Я не совсем понимаю, почемуэто происходит только в вашем маршруте / dashboard, потому что проблема также должна быть в вашем маршруте / index (если вы не добавили веб-промежуточное ПО где-то в вашем TodoController).

Я думаю, что это должно сработать:

Route::middleware(['web', 'auth'])->group(function () {
    Route::get('/index', 'todoApp\TodoController@index')->name('index');
    Route::get('/dashboard', 'todoApp\Dashboard@dashboard')->name('dashboard');
});
...