此代码来自Laravel,VerifyCsrfToken.php。它的评论解释了一些事情。我通过restangular从Angular向Laravel发送请求。令牌正确发送(我认为),但解密了无效的数据异常。我可以通过删除最后的Decrypt调用来使这段代码工作。我看了看,发现没有提到在发送之前需要加密的标题,我甚至不知道该怎么做。
protected function tokensMatch($request)
{
$token = $request->session()->token();
//from log, $token = UD6zHpg6lQYa9Xdz69kmOa3D2BBr12ErbhJD744x
$header = $request->header('X-XSRF-TOKEN');
//from log, $header = UD6zHpg6lQYa9Xdz69kmOa3D2BBr12ErbhJD744x
if ( StringUtils::equals($token, $header)) Log::info('Token' . $token . " -- Header " . $header);
return StringUtils::equals($token, $request->input('_token')) ||
($header && StringUtils::equals($token, $this->encrypter->decrypt($header)));
//original line - Decrypt Error - invalid data
($header && StringUtils::equals($token, $header));
//my alternative - works!
//HOW SHOULD THE HEADER BE ENCRYPTED when sent????
//MY Current HEADER...
//X-XSRF-TOKEN: UD6zHpg6lQYa9Xdz69kmOa3D2BBr12ErbhJD744x
}
答案 0 :(得分:0)
我遇到了同样的问题,我使用加密器进行加密,然后才将其用于角度我的令牌。
$encrypter = app('Illuminate\Encryption\Encrypter');
$token = $encrypter->encrypt(csrf_token());
亚历