Laravel 5 Auth Post Submit - TokenMismatchException в строке VerifyCsrfToken.php 46
Только что зарегистрировали новое приложение в Laravel 5, и у меня возникли проблемы с использованием автономного окна...
Я продолжаю получать: TokenMismatchException в строке VerifyCsrfToken.php 46:
при отправке форм регистрации или регистрации...
Я могу видеть на странице формы входа в систему коды токенов, которые находятся в скрытом поле формы, и сеанс в этой точке один и тот же...
В качестве теста я также пробовал, так как некоторые другие сообщения предлагали комментировать
// 'App\Http\Middleware\VerifyCsrfToken', в app/Http/kernal.php, чтобы узнать, что произойдет. После этого каждый раз, когда я отправляю форму, я получаю сообщение, в котором говорится о перенаправлении на:/auth/login или /auth/register в зависимости от того, откуда я пришел, без успеха.
Странным было то, что это работало, когда я впервые установил фреймворк. Все, что я сделал с тех пор, провела несколько миграций и установила некоторые из моих моделей и контроллеров и засела db некоторыми пользовательскими данными.
UPDATE:
Внимательно рассмотрим это в функции tokensMatch() в строке 55 VerifyCsrfToken.php, если I:
var_dump($request->session()->token());
var_dump($request->input('_token'));
Я вижу, что два токена различаются, но в форме, используя:
var_dump(Session::all());
{{{ csrf_token() }}}
Они одинаковы. Маркер сеанса изменил некоторые параметры до того, как он добрался до функции tokensMatch() в строке 55 VerifyCsrfToken.php
Моя трассировка стека выглядит следующим образом:
in VerifyCsrfToken.php line 46
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 111
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
Ответы
Ответ 1
Сначала я просто начал работать с удалением строки:
'Осветите\Foundation\Http\Middleware\VerifyCsrfToken'
из/app/Http/Resquests/Kernel.php. Тем не менее, это означает, что отметка токена CSRF будет удалена, что означает, что ваш сайт не будет защищен от подделок с запросами на межсайтовый запрос.
Обновление
Согласно документации, вы должны добавить токен CSRF в свою форму, добавив этот фрагмент к вашему коду:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Я использовал первый способ в бэкэнд-сервисах для мобильного приложения, но я нахожу, что могу отправлять отправляемый CSRF-заголовок в запросах.
Ответ 2
Согласно документации, возможно, поэтому:
Вставить токен CSRF в форму
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Ответ 3
Проверьте файл routes.php
. У меня также была эта ошибка, и она оказалась вызвана пустой строкой наверху (непосредственно перед тегом <?php
). Такая глупая ошибка, надеюсь, это может помочь кому-то.
Ответ 4
У меня была такая же проблема. Я решил это, изменив следующую строку в config/session.php
'domain' => env('DOMAIN', 'yourdomainnamehere.co.uk'),
Затем добавьте следующую строку в .env
DOMAIN=null
Ответ 5
Если вы используете блейд-шаблоны, вы можете использовать put в своей форме
{{ csrf_field() }}
вместо
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Он работал со мной в Laravel 5.1.
Ответ 6
У меня была та же проблема, мое решение было
<form method="POST" action="path_to_action">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="text" name="some_name">
</form>
Ответ 7
Просто выйдите из системы и снова войдите в систему.
Это неизвестная ошибка, даже если я получаю ее в моей форме, иногда, но
все люди на форумах, которые все говорят,
но это не решает проблему
просто выйти из системы и повторно войти в систему
Ответ 8
Если вы хотите избавиться от TokenMismatchException в VerifyCsrfToken.php, проверьте эту ссылку для простого решения @Tariq Khan:
TokenMismatchException в VerifyCsrfToken.php
Ответ 9
У меня также была такая же ситуация сегодня, из-за внезапного моего приложения стало показывать мне это сообщение...
Я только что перезапустил свой сервер, и все это вернулось к нормальному.
Ответ 10
Решил проблему:
Когда я проверил app.blade, csrf-токен был жестко закодирован там, как <meta content="9DB/rSl5JKAkQenkfGLj4o/x6+1dIDC5m52IWJxjFfo=" name="csrf-token">
после удаления этого и добавления <meta content="authenticity_token" name="csrf-param">
исправил мою проблему. Это может помочь кому-то:)
Ответ 11
Вот что я делаю, чтобы исправить эту проблему.
Assume that your web server has already write access to session directory, in my case 'app/storage/framework/sessions/'.
Execute,
$ rm -f {your_web_app}/storage/framework/sessions/*
Reload web in your browser and try to login again.
Ответ 12
Есть много возможностей, которые могут вызвать эту проблему.
что я испытываю, это может быть проблемой неправильной конфигурации файла конфигурации session.php.
Вы случайно изменили конфигурационный файл session.php?
Возможно, вы изменили значение домена с нуля на имя вашего сайта или что-то еще в session.php
'domain' = > null,
Неправильная конфигурация в этом файле может вызвать эту проблему.
Ответ 13
У меня была такая же проблема, запустив php artisan config: cache
решил все это.
Я надеюсь, что это поможет кому-то
Ответ 14
Попробуйте маршрут php artisan: список и проверка промежуточного программного обеспечения id повторяется.
Например (веб-сайт, веб-сайт и т.д.).
В Laravel 5.3 сетевое промежуточное ПО активируется по умолчанию, я добавил
Route::group(['middleware' => 'web'], function () { ALL MY ROUTE });
с этим TokenMismatch был создан.
Исправить маршруты решить проблему для меня.
Для получения дополнительной информации см. Вопрос о Laracast
Ответ 15
Если вы хотите использовать CSRF в форме, вам нужно добавить эту строку в свою форму
<input type="hidden" name="_token" value="{{ csrf_token() }}">
и если вам не интересно использовать CSRF, вы должны прокомментировать следующую строку в файле kernel.php
//\App\Http\Middleware\VerifyCsrfToken::class,
Ответ 16
Возможно, это что-то с настройками вашего домена.
- Проверьте настройку "domain" в файле config/session.php.
- Установите его в "localhost" или в соответствующий домен, связанный с вашим приложением.
- Сохранить файл
Мина была извлечена из файла env, и приложение было в другом домене.
Надеюсь, что это спасет некоторые клетки мозга для кого-то.
Ответ 17
Интересно, что я столкнулся с подобной проблемой в последнее время. Я обнаружил, что есть два разных токена, созданных моим приложением Laravel 5.1. Я решил проблему, создав новый ключ приложения [php artisan key: generate]!
Ответ 18
<script>
function closedLogo()
{
$.ajax({
url: '{{route('core.closed-logo')}}',
type: 'post',
success: function (data) {
$('#return').html(data);
}
});
}
</script>