Подтвердить что ты не робот

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
4b9b3361

Ответ 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>