Laravel 5.2: Auth :: check () продолжает возвращать false

Я начинаю новый проект Laravel 5.2 и столкнулся со странной проблемой аутентификации: Auth::check() постоянно возвращает ложь

Если вы думаете, что это дубликат, читайте дальше. Я попытался несколько предложений по исправлению этой проблемы, но не повезло.

Настройки:

  • Прикладная среда Laravel Homestead’s php-7 ветка (Бродячая коробка).
  • Пользовательские модели используют UUID вместо идентификаторов (таблица имеет автоинкремент id переключился на 36 символов uuid столбец первичного ключа).
  • Модель пользователя primaryKey был изменен с id в uuid а также incrementing был установлен в ложь.
  • Используемый artisan make:auth генерировать базовый уровень аутентификации для работы.
  • Маршруты аутентификации были установлены для getLogin, postLogin, getEmail, postEmail, getReset а также postReset и они работают нормально.
  • web Промежуточное ПО используется для всех маршрутов в приложении на данный момент.
  • Конфигурация аутентификации и конфигурация сессии внутри config dir имеют значения по умолчанию (кроме изменения пространства имен для модели аутентификации).
  • Передача неверных учетных данных вызывает ошибки проверки правильности.
  • После входа в redirectPath на AuthController работает, но guest промежуточное ПО перехватывает запрос и перенаправляет пользователя обратно на маршрут входа в систему.

Я могу создавать пользователей и изменять их забытые пароли, используя созданные определения маршрутов. Я могу «войти» по маршруту входа в систему, но Auth::check() всегда возвращает ложь в guest промежуточное ПО (Middleware\Authenticate учебный класс).

Я пробовал следующие драйверы сессии без успеха:

  • файл
  • Redis
  • печенье
  • База данных

Я даже пытался вернуть users первичный ключ таблицы к имени id, но это ничего не изменило.

Что-то, что я заметил: поскольку мои идентификаторы пользователей на самом деле являются символами UUID типа char (36), драйвер сеанса базы данных не сохранил user_id правильно: он сохранил целое число символы из пользовательского UUID, а затем обрезать оставшуюся часть значения (например, users.uuid 3f2358907afafaf становится session.user_id 3), или же 0 если идентификатор пользователя начинается с нечислового символа (a-f).

Я нашел огромное количество вопросов, тем и результатов поиска по этой же проблеме. Я попробовал то, что, по словам большинства, сработало бы, но все равно не получилось:

  • Я установил $user->primaryKey охраняемая собственность uuid (который влияет $model->getKey() а также $model->getAuthIdentifier() тоже).
  • Я пробовал несколько разных драйверов сессий без успеха.
  • Я пытался вернуться к users.id имя столбца вместо users.uuid, без изменений.
  • Я очистил все кеши, о которых могу думать.
  • Я проверил, что до вывода представлений нет вывода пробелов (нужно копать немного глубже, хотя в случае, если я пропустил некоторые файлы).

Единственное, что я еще не попробовал должным образом, — это просто переключить идентификаторы пользователей с автоинкрементом (вместо UUID). Я уже довольно тесно связал концепцию UUID, но я посмотрю, что я могу сделать, чтобы решить эту проблему.

Пожалуйста, спросите детали, если я что-то упустил в этом вопросе.

0

Решение

Я думаю, что в Laravel есть ошибка. Это часто продолжает возвращаться false на каждой Auth::check() после казни Auth::attempt()

Попробуйте отредактировать $middleware[]; в Kernel.php, чтобы:

protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
];

Я надеюсь, что это сработает.

1

Другие решения

Eloquent Model Laravel предполагает, что каждая таблица имеет столбец первичного ключа с именем Я бы.

Так что если вы изменили первичный ключ вашей таблицы Users на что-то другое, ваш сеанс аутентификации не будет установлен.

Вы должны определить $ PrimaryKey свойство переопределять это соглашение так же, как определение $ table в классе Model, например:

protected $primaryKey = "your_field_ID";

Может быть поздно, но должно помочь другим, которые приходят сюда в поисках ответов.

1

По вопросам рекламы [email protected]