Laravel 明明有csrf_token仍然报419 token mismatch错误

25
Feb

Laravel 明明有csrf_token仍然报419 token mismatch错误

一个可能的原因是,因为项目的正式端和测试端(开发端也有可能)的.env中间配置的APP_NAME相同(或者都为纯中文),导致cookies的键相同,进而导致session冲突。

原理:laravel的cookies键产生位于config/session.php

'cookie' => env(
    'SESSION_COOKIE',
    Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
 ),

如果.env中间没有配置SESSION_COOKIE这一项(默认没有),那么cookies键会由APP_NAME格式化字符串生成,因为本土化原因中文会被删掉,所以如果两个站点的APP_NAME相同,比如都是xxwebsite,那么产生的键都是xxwebsite_session,如果都是中文的话,那么更会导致键直接是_session,引发更严重的跨站冲突。

解决方案:修改APP_NAME为不同的非中文字符串,或者为不同项目的.env中配置不同的SESSION_COOKIE字段。

参考文章

添加新评论