Laravel 5.3 - VerifyCsrfToken.php第68行中的TokenMismatchException:

时间:2016-10-12 11:14:19

标签: laravel-5.3

当我登录我的应用程序,并在我输入时立即返回,然后尝试注销,我从标题中收到错误,我该如何解决?

14 个答案:

答案 0 :(得分:8)

我在laravel 5.4中面临同样的问题..然后以下命令对我有效:)

chmod 777 storage / framework / sessions /

在此之前,它是chmod 775 storage / framework / sessions / ...因此我遇到了这个问题......

快乐编码

答案 1 :(得分:3)

来自Laravel 5.3文档

  

Auth :: routes方法现在为/ logout而不是GET路由注册POST路由。这可以防止其他Web应用程序将您的用户从您的应用程序中删除。要升级,您应该将您的注销请求转换为使用POST动词或为/ logout URI注册您自己的GET路由:

选项一: Route::get('/logout', 'Auth\LoginController@logout');

有关升级的更多信息,请查看此https://laravel.com/docs/5.3/upgrade

选项2

//Insert this on your head section
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">

<!-- Scripts -->
<script>
    window.Laravel = <?php echo json_encode([
        'csrfToken' => csrf_token(),
    ]); ?>
</script>

您希望退出的地方

 <ul class="dropdown-menu" role="menu">
   <li>
       <a href="{{ url('/logout') }}" onclick="event.preventDefault();
            document.getElementById('logout-form').submit();"> Logout
         </a>

        <form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
             {{ csrf_field() }}
         </form>
   </li>
</ul>

干杯

答案 2 :(得分:3)

我通过编辑文件 config-&gt; session.php

解决了这个问题
'domain' => env('SESSION_DOMAIN', null),

从文件中移除 SESSION_DOMAIN (.env)

最后 composer dumpautoload

答案 3 :(得分:1)

实际上我在Laravel 5.4中遇到了同样的问题,当我使用表单上传文件时,我发送了令牌并正确上传了文件。当我上传超过max filesize上传的文件时,会出现此问题。因此,只需在VerifyCsrfToken.php中为路由添加一个异常,消息就会消失,但文件无法上传。

use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */

    protected $except = [

        'anexoSesion',
    ];
    public function handle($request, Closure $next)
    {
        return parent::handle($request, $next);
    }

}

答案 4 :(得分:1)

SESSION_DOMAIN=localhostAPP_URL时,我在.env文件中添加了APP_URL=http://localhost。它对我有用我使用laravel 5.3

答案 5 :(得分:1)

我遇到了这个问题,因为我将本地主机的'secure' => env('SESSION_SECURE_COOKIE', false),设置为true。该值在project-folder/config/session.php文件中。由于我的本地主机不是https,所以我要面对这个问题。为我的本地主机设置为false后,问题消失了。

答案 6 :(得分:0)

我遇到了同样的问题。 我在IIS的Windows机器上运行Laravel / PHP。如果您也这样做,请确保用户IUSR具有项目目录的修改权限。 在允许用户之后,错误消失了。

答案 7 :(得分:0)

此问题通常会因权限而发生。正如Manish所说,你可以在你的会话文件夹中使用chmod 777,但我不建议这样做。首先检查使用artisan服务的应用程序是否存在相同的问题(而不是通过Nginx或Apache提供应用程序)。如果您不是,那么这是一个权限问题,您可以相应地更改文件夹的所有权。很可能是www-data用户需要写入文件夹的权限,但是,您需要检查您的环境以确保用户在某些情况下会有所不同。

答案 8 :(得分:0)

要解决此问题,请在路径文件中添加这两行(例如web.php)

Route::get('/', 'HomeController@index');// so when you logged out it go back 
Route::get('/home', 'HomeController@index');

这解决了我的问题。希望有所帮助。

答案 9 :(得分:0)

<强>照亮\基金会\ HTTP \中间件\ VerifyCsrfToken.php

使用Closure; //导入

protected $except = [
    //
];

public function handle($request, Closure $next)
{
    $response = $next($request);

    if (last(explode('\\',get_class($response))) != 'RedirectResponse') {
        $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
    }

    return $response;
}

所有网址

protected $except = [
    '*'
];

如果没有用

<强>照亮\基金会\ HTTP \ Kernel.php

// \ App \ Http \ Middleware \ VerifyCsrfToken :: class

此行添加评论

答案 10 :(得分:0)

  

开箱即用,Laravel附带了web和api中间件组,其中包含您可能希望应用于Web UI和API路由的常用中间件

如果您检查var obj1 = { score: [10, 22, 30, 55, 70, 90], lettersOfMyName: ["a", "m", "r"], avgScore: null, favoritePlayers: [{ name: "messi", club: "barcelona" }, { name: "totti", club: "roma" } ], getPlaysIn() { return this.favoritePlayers.map(function(player) { return player.name + ' plays in ' + player.club; }); } }; console.log(obj1.getPlaysIn());,您会发现默认情况下app/Providers/RouteServiceProvider.php中间件组适用于web中的所有路由。

routes/web.php

现在,如果你去检查protected function mapWebRoutes() { Route::group([ 'middleware' => 'web', 'namespace' => $this->namespace, ], function ($router) { require base_path('routes/web.php'); }); } 并查看app/Http/Kernel.php属性,你会发现一个新的$middlewareGroups中间件。您可以阅读它,但如果您从EncryptCookies中间件组中删除此中间件,您的应用可能不会提供您当前获得的web

答案 11 :(得分:-1)

使用laravel5.4 for rest API时,我也遇到了这个问题。只需将路由名称添加到app / Http / Middleware / VerifyCsrfToken.php文件中。

protected $except = [

    'test/login',
];

添加该行后,我运行API,它成功执行。

答案 12 :(得分:-3)

我在版本5.3.29中遇到了这种问题 以下方法对我有用。

只需更改.env文件中的以下行。

APP_KEY=base64:aBCdeFghI+jKLMnOPqRSTuvw1xYzAbCDeFgHiJKL57+4= (example key)

删除 base64:部分,并按照

进行操作
APP_KEY=aBCdeFghI+jKLMnOPqRSTuvw1xYzAbCDeFgHiJKL57+4=

答案 13 :(得分:-4)

转到中间件 - &gt; verifycsrftoken.php - &gt;在指定的数组中添加url。