正确设置Laravel 5 CSRF令牌的标头

时间:2014-12-04 21:05:44

标签: angularjs laravel csrf restangular

好吧,几个小时都在搜索这个,但是找不到解决方案的开头。

我正在使用带有laravel后端的angularJS前端。 Restangular是我的通讯服务。

我的帖子很好,因为我可以在数据中包含_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无法解密。而且我非常关注解密功能,但不明白它为什么会失败...

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

这是由于加密了csrf令牌。 Laravel期望令牌被加密。

它尝试解密您提供的普通令牌,但失败了。

在标题中使用令牌之前,您必须加密它。

$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());

这对我有用。

亚历

答案 1 :(得分:3)

对于Laravel 5,无需将CSRF令牌添加到Angular http标头。

使用Angular的Laravel 5会自动为您执行此操作。

http://laravel.com/docs/5.1/routing#csrf-x-xsrf-token