Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了rest – 使用Angular前端和Drupal 7后端处理CSRF / XSRF令牌大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为Drupal 7网站构建一个新的AngularJS前端.这是使用服务模块进行基于会话的身份验证,使用CORS跨两个域.我能够使用Drupal进行身份验证,检索用户对象和会话数据,然后从服务模块获取CSRF令牌.我遇到的问题是在标题中设置所有这些,以便后续请求被验证.我理解整体概念,但对AngularJS和新的CSRF攻击都是新手.

从我收集的关于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,config) {
                $cookies["XSRF-TOKEN"] = data;
                Sessionservice.setUserAuthenticated(true);
            }).error(function (data,config) {
                console.log('error loading xsrf/csrf');
            });
        }).error(function (data,config) {
            if(data) {
                console.log(data);
                var msgText = data.join("\n");
                alert(msgText);
            } else {
                alert('Unable to login');
            }
        });
      };

解决方法

解决方案与如何设置cookie然后通过后续请求有关.尝试手动设置它们并不顺利,但解决方案比我预期的要简单.每个$http调用都需要设置选项:

withCredentials: true

我做的另一个改变是使用术语CSRF而不是XSRF,以与Drupal保持一致.我没有使用任何内置的AngularJS CSRF功能.

大佬总结

以上是大佬教程为你收集整理的rest – 使用Angular前端和Drupal 7后端处理CSRF / XSRF令牌全部内容,希望文章能够帮你解决rest – 使用Angular前端和Drupal 7后端处理CSRF / XSRF令牌所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。