【发布时间】:2015-07-07 11:57:45
【问题描述】:
我有一个项目分为后端和前端,后端(API rest)是在 Laravel 5 中构建的,前端是在 AngularJS 中构建的。这两个项目都是独立的,它们应该托管在不同的服务器上。
在第一个请求中,我使用以下代码从 Laravel 获取 CSRF 令牌:
var xhReq = new XMLHttpRequest();
xhReq.open("GET", "http://laravel.local/api/token", false);
xhReq.send(null);
angular.module('mytodoApp').constant('CSRF_TOKEN',xhReq.responseText);
所以每次我向 API 发出请求时都会发送 CSRF_TOKEN,如下所示:
$scope.deleteTodo = function(index) {
$scope.loading = true;
var todo = $scope.tours[index];
$http.defaults.headers.common['XSRF-TOKEN'] = CSRF_TOKEN;
console.log($http.defaults.headers.common['XSRF-TOKEN']);
$http.delete('http://laravel.local/api/deleteTodo/' + todo.id, {headers : {'XSRF-TOKEN': CSRF_TOKEN}})
.success(function() {
$scope.todos.splice(index, 1);
$scope.loading = false;
});
API 总是返回:
TokenMismatchException in compiled.php line 2440:
Laravel 是否会根据 Angular 的每个请求更改 CSRF 令牌?对于每个请求,Laravel 都会在 storage/framework/sessions 上创建一个新文件。您是否推荐任何其他解决方案来验证对 API 的请求是否来自安全来源?
【问题讨论】:
-
angular 内置了
$http..的令牌处理。阅读文档
标签: angularjs api rest laravel token