【问题标题】:TokenMismatchException in VerifyCsrfToken.php line 67: in Laravel 5.2VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:在 Laravel 5.2 中
【发布时间】:2017-09-24 05:14:00
【问题描述】:
TokenMismatchException in VerifyCsrfToken.php line 67:
in VerifyCsrfToken.php line 67
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 726
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 54
at require_once('C:\xampp\htdocs\coparmex\public\index.php') in server.php line 21

我已经尝试解决这个问题一周了!我以表格形式发送信息的每 5 次中就有 1 次发生这种情况。这就是我的舒尔。

  • 我正在使用{!! Form:: !!}标签和post或put方法,所以它会自动生成{!! csrf_token() !!},它确实做到了,如果我看到页面的代码我无法检查它
  • 我在主布局中有<meta name="csrf-token" content="{{ csrf_token() }}"/>
  • meta 中的 token 与 form 中的 token 相同
  • 我正在使用文件驱动程序CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=syncin .env
  • 我清理了导航曲奇
  • 我正在使用带有Auth::guard($guard)->check() 的控制器中间件
  • 我使用了这些命令:php artisan cache:clear, composer dump-autoload, php artisan clear-compiled

这是一个记录表单的例子

{!! Form::open(['route'=>'log.store', 'method'=>'POST']) !!}
{!!Form::text('user',null,array('placeholder' => 'User'))!!}
{!!Form::password('password',array('placeholder' => 'Password'))!!}<br>
{!!Form::select('type', [
    'A' => 'A', 
    'E' => 'E',
])!!}
{!!Form::submit('Login',['class'=>'button'])!!}
{!!Form::close()!!}

我正在使用警卫,如果我与网络警卫开始会话,它工作正常,错误永远不会显示,所以我认为这应该是我的警卫的错误。这些是我的守卫:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'user2' => [
            'driver' => 'session',
            'provider' => 'users2',
        ],

    'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

这些是我的供应商

'providers' => [
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],

    'users2' => [
        'driver' => 'eloquent',
        'model' => App\User2::class,
    ],

    'users' => [
         'driver' => 'eloquent',
         'model' => BolsaDeTrabajo\User::class,
     ],
],

这就是我开始会话的方式

    if($request['type'] == 'A'){
        if (Auth::guard('user2')->attempt([
        'user' => $request['user'],
        'password' => $request['password']
        ], true)) {
            return Redirect::to('/');
        }else{
            return Redirect::to('/')->with('message', 'error');
        }
    }else{
        if (Auth::guard('admin')->attempt([
            'user' => $request['user'],
            'password' => $request['password']
            ], true)) {
                return Redirect::to('/');
        }else{
            return Redirect::to('/')->with('message', 'error');
        }
    }

这是我的 auth.php

return [


    'driver' => env('SESSION_DRIVER', 'file'),

    'lifetime' => 120,

    'expire_on_close' => false,

    'encrypt' => false,

    'files' => storage_path('framework/sessions'),

    'connection' => null,

    'table' => 'sessions',

    'lottery' => [2, 100],

    'cookie' => 'laravel_session',

    'path' => '/',

    'domain' => env('SESSION_DOMAIN', null),

    'secure' => false,

    'http_only' => true,

];

【问题讨论】:

  • 您是否使用了多个系统实例?例如:localhost:80、localhost:81 或在远程主机中,例如:123.123.123.123:80 ?
  • 不,我不是,它总是 localhost:8000
  • config/session.php中检查会话lifetime,你可能设置的太短了?
  • 我改成 1440 报错更频繁了:/

标签: php laravel session exception token


【解决方案1】:

可能是token已经过期了,试试用表单刷新页面。检查它的源代码,你应该看到一个

<input type="hidden" name="_token" value="yourtokenhere">

由于 crsf 令牌丢失或不正确而触发 TokenMismatchException。

【讨论】:

  • 是的,我看到了这个 但我怎么知道它过期了?
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 2016-07-27
  • 2016-04-24
  • 1970-01-01
相关资源
最近更新 更多