Я начинаю новый проект Laravel 5.2 и столкнулся со странной проблемой аутентификации: Auth::check()
постоянно возвращает ложь
Если вы думаете, что это дубликат, читайте дальше. Я попытался несколько предложений по исправлению этой проблемы, но не повезло.
Настройки:
php-7
ветка (Бродячая коробка).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
учебный класс).
Я пробовал следующие драйверы сессии без успеха:
Я даже пытался вернуть 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, но я посмотрю, что я могу сделать, чтобы решить эту проблему.
Пожалуйста, спросите детали, если я что-то упустил в этом вопросе.
Я думаю, что в 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,
];
Я надеюсь, что это сработает.
Eloquent Model Laravel предполагает, что каждая таблица имеет столбец первичного ключа с именем Я бы.
Так что если вы изменили первичный ключ вашей таблицы Users на что-то другое, ваш сеанс аутентификации не будет установлен.
Вы должны определить $ PrimaryKey свойство переопределять это соглашение так же, как определение $ table в классе Model, например:
protected $primaryKey = "your_field_ID";
Может быть поздно, но должно помочь другим, которые приходят сюда в поисках ответов.