如何解决带有Sanctum和Laravel的VerifyCsrfToken类的奇怪行为
我需要重写VerifyCsrfToken
类的tokensMatch
方法,以便在比较令牌之前清除掉令牌上残留的一些奇怪的字符串伪像,例如:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
protected function tokensMatch($request)
{
$token = $this->getTokenFromRequest($request);
// Check if token still has cookie prefix? Strip it off.
if (strpos($token,'|') !== false) {
$token = explode('|',$this->getTokenFromRequest($request))[1];
}
// Check for random '";' on the end of the token? Strip it off.
if (strpos($token,'";') !== false) {
$token = str_replace('";','',$token);
}
return is_string($request->session()->token()) &&
is_string($token) &&
hash_equals($request->session()->token(),$token);
}
}
通过调试,我注意到来自$token
函数的getTokenFromRequest
看起来像这样:
fc1e5|MVz88AWCnGydS4nuZXjAlpaYTBKkLtuqsXAUlhc9";
来自$request->session()->token()
的令牌看起来像这样:
MVz88AWCnGydS4nuZXjAlpaYTBKkLtuqsXAUlhc9
请注意,除了第一个前缀以竖线分隔的前缀和双引号结尾(以分号结尾)之外,它们是如何相同的?
我的方法去除了这些,但是如何以及为什么将它们留在那里?
我的项目是一个Laravel 5.5项目,该项目已更新至7.x,并且全新安装了Sanctum。
有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。