我正在爲Drupal 7網站構建新的AngularJS前端。這是通過基於會話的認證使用服務模塊,使用CORS跨兩個域。我可以使用Drupal進行身份驗證,檢索用戶對象和會話數據,然後從服務模塊獲取CSRF令牌。我遇到的麻煩是將所有這些設置在標題中,以便後續請求得到驗證。我瞭解整體概念,但對AngularJS和防止CSRF攻擊都是新手。使用Angular前端和Drupal 7後端處理CSRF/XSRF標記
從我所瞭解的有關AngularJS和RubyOnRails的設置中可以看出,平臺之間關於令牌的命名方式和處理方式會有不一致之處。關於如何在標題中設置此令牌,似乎也有許多建議。但是,我很難找到一個如何讓這些平臺說同一種語言的可靠示例。
我在app.js我$ httpProvider做的唯一的事情是:
delete $httpProvider.defaults.headers.common['X-Requested-With'];
登錄控制器,在controller.js:
.controller('LoginCtrl', ['$scope', '$http', '$cookies', 'SessionService', function($scope, $http, $cookies, SessionService) {
$scope.login = function(user) {
//set login url and variables
var url = 'http://mywebsite.com/service/default/user/login.json';
var postDataString = 'name=' + encodeURIComponent(user.username) + '&pass=' + encodeURIComponent(user.password);
$http({
method: 'POST',
url: url,
data : postDataString,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (data, status, headers, config) {
var sessId = data.sessid;
var sessName = data.session_name;
$cookies[sessName] = sessId;
var xsrfUrl = 'http://mywebsite.com/services/session/token';
$http({
method: 'GET',
url: xsrfUrl
}).success(function (data, status, headers, config) {
$cookies["XSRF-TOKEN"] = data;
SessionService.setUserAuthenticated(true);
}).error(function (data, status, headers, config) {
console.log('error loading xsrf/csrf');
});
}).error(function (data, status, headers, config) {
if(data) {
console.log(data);
var msgText = data.join("\n");
alert(msgText);
} else {
alert('Unable to login');
}
});
};
對其進行了長久以來這個答案被張貼。但是有沒有機會舉例說明你如何進一步提出後續請求?我正在努力與此。我可以登錄並存儲所有用戶會話詳細信息和令牌(發回cookie和X-CSRF-令牌)。但是我對drupal做出的每一個進一步的請求都返回'user is not logged in'錯誤。 –