2016-03-10 5 views
1

У меня есть мой auth, делая это при входе в систему.Auth не сохраняется в Laravel 5.2

if (Auth::attempt($userdata)) { 
    dd(Auth::user()); //this shows the user just fine, 
         //which proves that the auth driver is working. 
    return redirect()->intended('dashboard'); 
} 

Однако после перенаправления на приборную панель. Кажется, auth не сохраняется. Если я делаю dd(Auth::user()) или даже просто Auth::check(), он возвращает null.

Вот маршрут:

Route::group(['middleware' => ['web']], function() { 
    Route::get('test',function(){ 
     dd(Auth::user()); //returns null 
     echo Auth::user()->name; // returns Trying to get property of non-object 
    }); 
}); 

Что я делаю неправильно?

Странная вещь об этом заключается в том, что вчера вечером она работала. Это просто волшебным образом перестало работать.

+0

Сессия не обязательно сохраняется, если вы 'dd' после' попытки'. Что происходит, если вы просто возвращаете пустую строку в качестве ответа вместо своей перенаправления и вручную переходите на тестовый маршрут? – Dencker

+0

Кроме того, вместо 'try' вы можете выполнить некоторую дальнейшую отладку, вызывая вместо этого' login' и принудительно вводить пользователя в систему. Это будет, по крайней мере, обходить потенциальную проблему с фактической авторизацией. Это, скорее всего, проблема с cookie или сеансом :) – Dencker

ответ

0

Просто добавьте промежуточное ПО «auth» к вашему «тестовому» маршруту и ​​попытайтесь получить доступ к нему во время входа в систему. Он не должен давать вам никаких ошибок таким образом. Если вы попытаетесь получить к нему доступ без входа в систему, он должен перенаправить вас на любой маршрут, определенный в промежуточном программном обеспечении «auth».

С помощью промежуточного программного обеспечения «auth» вы в основном гарантируете, что Auth :: user() всегда вернет правильный экземпляр пользователя.

Теперь, если это работает, вы можете быть уверены, что Laravel Auth действительно продолжает оставаться пользователем, и проблема находится где-то еще в вашем коде.

Я не заметил никаких проблем с классом Auth в Laravel.

+0

Laravel 5.2 использует сетевое промежуточное программное обеспечение. Нет необходимости в промежуточном программном обеспечении auth. Если я добавлю промежуточное ПО Auth, как вы сказали. Он просто перенаправляет меня обратно на страницу входа. То, что я нахожу странным, заключается в том, что попытка Auth возвращает действительный логин. Это просто перенаправление, которое «забывает». Итак, с «промежуточным» интерфейсом, я просто получаю пустую страницу при перенаправлении. И с помощью промежуточного ПО auth я перенаправляюсь на страницу входа. – KyleK

+0

У веб-промежуточного программного обеспечения есть такие функции, как защита CSRF и XSS, он также не проверяет, вошел ли пользователь в систему. Просто хотел указать, что вы действительно можете проверить, делает ли Auth то, что он должен делать при входе пользователя в систему приложение, защитив тот один маршрут, который у вас есть внутри вашей группы, защищенный с помощью промежуточного программного обеспечения «web», чтобы убедиться, что Auth работает правильно.Если это (не разрешая вам доступ, если вы не вошли в систему), то ваша проблема находится в каком-то другом месте вашего кода :) –

+0

Хорошо, но даже после добавления промежуточного ПО auth я просто перенаправляюсь при входе в систему, обратно на страницу входа в систему , Хотя dd (Auth :: user()) в контроллере Auth показывает зарегистрированного пользователя? Итак, что я говорю, это то, что логин, похоже, работает, по одному запросу, но при перенаправлении он не сохраняется, поэтому перенаправляет обратно на страницу входа. Пробовал драйвер сеанса, драйвер базы данных, драйвер файлов все. Ничего не работает – KyleK

0

Решение этого не является очевидным, особенно из старых версий laravel.
Благодаря этой ссылке. Auth Session killed in Laravel 5.2
Я был в состоянии решить эту проблему, поэтому я отправлю ответ, чтобы помочь другим, кто сталкивается с той же проблемой.

Первоначально я просто имел это в своих маршрутах.

Route::post('app/login', 'Auth\[email protected]'); 

Route::group(['middleware' => ['web','auth']], function() { 
    Route::get('test',function(){ 
     dd(Auth::user());// was always returning null 
    }); 
}); 

Но, чтобы получить Логин упорствовать, я должен был сделать это

Route::group(['middleware' =>[ 'web']], function() { 
    Route::post('app/login', 'Auth\[email protected]'); 
}); 

Route::group(['middleware' => ['web','auth']], function() { 
    Route::get('test',function(){ 
     echo Auth::user()->name; 
    }); 
}); 

Видимо любой маршрут Thats собирается позвонить или зарегистрировать сеанс должен использовать «паутина» промежуточное программное обеспечение.

Смежные вопросы