2016-03-20 1 views
1

Я получил эту регистрационную форму:Laravel 5.1. Токен от и маркер сеанса отличаются с помощью мобильного браузера (действие) Логин

<form class="form-horizontal" role="form" method="POST" action="{{ url('/auth/login') }}"> 
    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
    ... 

я Войти без проблем с помощью браузера с рабочего стола (IE, Chrome, Firefox, .. .), но проблема исходит от мобильного устройства (платформа Android).

Я получил это ИСКЛЮЧЕНИЕ:

TokenMismatchException in VerifyCsrfToken.php line 53. 

Когда я пошел в VerifyCsrfToken.php я обнаружил, что маркер передается из формы и маркеров taked от объекта сессии различен. Но это происходит только с моего телефона Android.

О функции называется tokensMatch в файле VerifyCsrfToken.php (link to github) Я добавить этот код, чтобы увидеть, что происходит:

echo '<br>X-CSRF-TOKEN:'.$request->header('X-CSRF-TOKEN'); 
echo '<br>X-XSRF-TOKEN:'.$request->header('X-XSRF-TOKEN'); 
echo '<br>token:'.$request->input('_token'); 
echo '<br>sessionToken:'.$request->session()->token(); 

Токен и sessionToken различны (остальные два значения являются пустыми).

Любые подсказки об этом? Это происходит только с помощью мобильного устройства (два тестируемых Android).

UPDATE: Я установил входной ток в текст для просмотра содержимого из браузера. Дело в том, что в мобильных устройствах, когда я обновляю url [domain.com]/auth/login, изменения токена в каждом вызове, однако, из браузера рабочего стола токен не изменяется. Я думаю, что в мобильных устройствах сеансы создаются и уничтожаются при каждом вызове.

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

ответ

4

Решено.

Проблема была неправильным значением ключа «domain» в session.php. На мобильных устройствах по какой-либо причине политики cookie более ограничены.

я получил следующее значение:

'domain' => env('SESSION_DOMAIN', 'www.[mydomain].com'), 

Мне нужно удалить www., так что это значение должно быть так:

'domain' => env('SESSION_DOMAIN', '[mydomain].com'), 

По какой-либо причине из настольного браузера, без специальной конфигурации печенья работает без проблем.