Laravel 5.7 сессионное флеш-сообщение для логина, работающего периодически - PullRequest
0 голосов
/ 07 декабря 2018

Я использую Laravel 5.7 и успешно отсортировал вход и выход для пользователя, используя ручную аутентификацию.

У меня есть это в моем шаблоне блейд-логина для предупреждения о неверных учетных данных:

@if (Session::has('status'))
  <div class="alert alert-danger text-center" role="alert">
    {!! Session::get('status') !!}
  </div>
@endif

Это в моем контроллере, после определения того, что предоставленные имя пользователя и пароль не принимаются:

$request->session()->flash('status', 'These credentials are not working.<br>Refresh and try again.');
  return redirect()->back()->withInput();

Когда это работает, я получаю сообщение о статусе и имя пользователя предоставляется.Я не могу понять, что будет дальше.Я пробовал все следующее, и иногда сообщение будет отображаться снова, а иногда нет.Это никогда не показывалось более двух раз подряд.И как только он не показывается, кажется, не показывается некоторое время.

  • Введите другой пароль (хотя имя пользователя уже было введено)
  • Обновите браузер и попробуйте оба снова
  • измените имя пользователя, а затем введите пароль

Даже когда я очищаю куки, это, кажется, не имеет никакого значения.Я дважды проверил настройки файлов cookie и сеансов в файлах .env и config.Я не получаю сообщений об ошибках.Я использую базу данных с MySQL.Я использовал миграцию для построения таблицы сессий.

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

Когда я просматриваю файл cookie сеанса в Chrome, он меняется после каждой отправки.Я не имею в виду XSRF-TOKEN, я имею в виду сессионный cookie.Я удивлен, что это меняется.

Я думаю, что мой код в порядке, но у меня где-то неправильная настройка.Куда мне смотреть?

ОБНОВЛЕНИЕ: Если я установлю флажок «Отключить кэш, когда DevTools открыт», он будет работать намного лучше.Я могу отправить неверные учетные данные, и он покажет сообщение и имя пользователя в поле.Если я ввожу пароль и отправляю его перенаправления на чистый логин, ни сообщения, ни данных.

Если я получу сообщение и затем вручную обновлю браузер до нового имени входа, я получу сообщение снова, вероятно, в половине случаев.Но затем я снова попытаюсь сделать то же самое (обновить, повторить попытку) и снова получить несколько перенаправлений на страницу входа без данных / сообщений.

1 Ответ

0 голосов
/ 07 декабря 2018

Вместо прошивки попробуйте перенаправить сообщение:

return redirect()->back()->with('status', 'These credentials are not working.<br>Refresh and try again.'); 
...