Laravel Sanctum 做 SPA 认证时报 The MAC is invalid. 错误
使用 Laravel Sanctum 做 SPA 认证时,在
config/sanctum
中配置 stateful 后,访问 login 接口报 The MAC is invalid. 错误。配置后,post 请求都会报这个错误。
环境:
- homestead 环境(php7.3 nginx laravel7.22.4)
- 接口域: jiujiu.cn
- spa 页面域 test.jiujiu.cn
配置
- cors 配置 ok,也开启了 supports_credentials
- 前端 axios 设置了 axios.defaults.withCredentials = true
- config/session 设置 domain 为 .jiujiu.cn
- config/sanctum 设置 stateful 为 test.jiujiu.cn
调用栈
{
"message": "The MAC is invalid.",
"exception": "Illuminate\\Contracts\\Encryption\\DecryptException",
"file": "/home/vagrant/code/work/jiujiu.cn/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php",
"line": 199,
"trace": [
{
"file": "/home/vagrant/code/work/jiujiu.cn/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php",
"line": 136,
"function": "getJsonPayload",
"class": "Illuminate\\Encryption\\Encrypter",
"type": "->"
},
{
"file": "/home/vagrant/code/work/jiuxin.cn/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php",
"line": 155,
"function": "decrypt",
"class": "Illuminate\\Encryption\\Encrypter",
"type": "->"
},
{
"file": "/home/vagrant/code/work/jiujiu.cn/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php",
"line": 137,
"function": "getTokenFromRequest",
"class": "Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken",
"type": "->"
},
具体看 VerifyCsrfToken
/**
* Get the CSRF token from the request.
*
* @param \Illuminate\Http\Request $request
* @return string
*/
protected function getTokenFromRequest($request)
{
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
$token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
}
return $token;
}
是 decrypt 报错。
请求 login 报 The MAC is invalid. 错误。 使用 Laravel Sanctum 的小伙伴有遇到这个问题么。
XSRF-TOKEN 自己颁发的,到 decrypt 就报错。这啥鬼呢。
推荐文章: