[英]Correctly set headers for Laravel 5 CSRF Token
好吧,几个小时都在搜索这个,但是找不到解决方案的开头。
我正在使用带有laravel后端的angularJS前端。 Restangular是我的通讯服务。
我的POST很好,因为我可以在数据中包含_token,它会起作用。
但是对于Restangular来调用destroy函数它看起来像......
Restangular.all('auth/logout').remove(); //maps to AuthController@Destroy
一切都很好,但是你会得到一个TOKENMISMATCH例外,这是一个很好的安全问题
由于我找不到将_token包含在remove中的方法,因为它实际上是无体的,所以我决定将标记放在标题中。
RestangularProvider.setDefaultHeaders({'X-XSRF-TOKEN': CSRF_TOKEN}); //CSRF_TOKEN gathered elsewhere
在Chrome dev tolos中,我可以看到标头设置为
X-XSRF-TOKEN:ClkQIRLpFQgMg8ZT6X5CF6doCplRfdJzW8msx2JI
X-XSRF-TOKEN 正是 VerifyCrsfToken.php所寻求的。 然而,它吐出了解密错误。 任何其他令牌名称,例如XSRF-TOKEN,_ TOKEN,CSRF_TOKEN都会吐出令牌不匹配。
由于最后一个事实,似乎标题被正确声明,但超出我的理解范围的东西导致Laravel无法解密。 而且我非常关注解密功能,但不明白它为什么会失败......
谢谢您的帮助。
这是由于csrf令牌的加密。 Laravel期望令牌被加密。
它尝试解密您提供的普通令牌,但它失败了。
在标题中使用令牌之前,您必须对其进行加密。
$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
这对我有用。
亚历克斯
对于Laravel 5, 无需向Angular http标头添加CSRF令牌。
带有Angular的Laravel 5会自动为您完成此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.