Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Дорогие друзья, столкнулся с проблемой, которую опишу ниже, прошу разобраться с ней. К сожалению с Laravel имею опыта маловато, причем работал с 4 версией продукта.
Операционная система: Windows 10 64
Сервер: Open Server с PHP 5.6 и Apatch 2.4
Laravel 5.3
Стоит глобальная задача , "перенести" сайт с 4 версии Ларки на 5.3. Проблема возникла при разработке формы входа на сайте. В связи с тем, что данная форма должна работать на аяксе, было решено отказаться от использования стандартного решения аунтефикации в пользу своего.
Сделал форму, написал аякс обработчик, прописал в роутер маршрут:
Route::post('auth', 'AjaxUserController@auth');
Ну и собственно в данном методе без лишней шелухи всего одна строка:
if (Auth::attempt(['email' => $email, 'password' => $password], true)) { ...
В Laravel 4, это работает без проблем, думал, что и в Laravel 5.3 сложности не будет, но, как говорится, что-то пошло не так
По итогу, метод отрабатывает и возвращает true, как положено. Следом можно вернуть данные о юзере через Auth:user() - все отлично.
Но если обновить страницу, то if(Auth:check()){ ... выдаст false
Какая-то проблема как будто с сессией.
При этом, если воспользоваться дефолтной формой, то все прекрасно работает.
Не пойму вот в чем проблема, кучу всего уже перелопатил и статей и видео, не пойму в чем проблема. Где то читал, что нужно делать middleware дополнительно, в других источниках пишут, что и так должно работать.
Прошу разобраться с ситуацией.
Не в сети
Не в сети
}%Убери web middleware из маршрутов и сравни свой Kernel.php со стандартным в 5.3 версии.
Kernel.php у меня стандартный, единственное, что не так - закомментирована строка на проверку токена -\App\Http\Middleware\VerifyCsrfToken::class,
Попробовал убрать web - все тоже самое
Не в сети
web обратно не возвращай, если вернешь в web.php, то сессии будут глючить. Очисти кэш маршрутов и общий кэш:
php artisan route:clear
php artisan cache:clear
Если не поможет, ищи проблему в Kernel и своем коде.
Изменено AlexeyMezenin (06.01.2017 21:16:40)
Не в сети
Потратил кучу времени, но в итоге разобрался с проблемой. Главная проблема, впрочем как всегда, оказалось в том, что кто-то рукожоп.
При отработка
if (Auth::attempt(['email' => $email, 'password' => $password], true)) { ..
у меня на клиент возвращалась либо строка вида: echo 'success'; , либо json, который отправлялся, опять же, через echo json_encode([]). Проблема именно в том, что если выводить что-то через echo, то перестает работать сессия. Хз почему это так работает, но вот именно так.
Как решение, отдавать результат через return response()->json();
Ах, я балбес)
Не в сети
Не в сети
}%Хочешь сказать, что у тебя с web middleware в web.php маршруты нормально с сессией работают?
Вроде пока все нормально. Если возникнут проблемы, отпишусь в этом топе. И спасибо за помощь
Не в сети