防止在$ resource POST上使用查询字符串

德拉米

我有一个定义了api服务的angularJS应用程序,如下所示:

(function ()
{
    'use strict';

    angular
        .module('myApp')
        .factory('api', apiService);

    /** @ngInject */
    function apiService($resource)
    {
        var api = {};

        // Base Url
        api.baseUrl = 'http://localhost:37243/';

        api.Auth = $resource(api.baseUrl + 'auth/:verb', {}, {
            login: {
                method: "POST",
                params: {
                    verb: 'credentials'
                }
            },
            logout: {
                method: "GET",
                params: { verb: 'logout' }
            },
            getSession: {
                method: "GET",
                params: { verb: 'session' }
            }
        });

        return api;
    }

})();

我正在从Auth服务执行登录方法,如下所示:

authService.login = function (user, success, error) {
        var apiAuth = new api.Auth();

            apiAuth.$login(user).then(
                function (response) {
                    var loginData = response;
                    authService.getSession();

                    $rootScope.$broadcast(AUTH_EVENTS.loginSuccess);
                    success(loginData);
                }, function (response) {
                    $rootScope.$broadcast(AUTH_EVENTS.loginFailed);
                    error(response);
                });
        };

api调用正在运行,但它正在查询字符串中传递有效负载,而不是数据有效负载。我想我的$ resource配置错误,但无法弄清楚原因。

正在发送什么:

http:// localhost:37243 / auth / credentials?password = Password1&username = admin

我要发送的内容:

POST http:// localhost:37243 / auth / credentials {密码:“ Password1”,用户名:“ admin”}

有任何想法吗?

德拉米

我已经解决了这个问题...

原因是因为我要实例化资源对象Auth,然后执行该方法。

从ngResource文档中,“非GET”方法(如我的方法)的方法签名为:

非GET“类”操作:Resource.action([参数],postData,[成功],[错误])

非GET实例操作:instance。$ action([参数],[成功],[错误])

所以我在没有postData参数的第二种情况下运行。

更改我的代码以不实例化该对象,如下所示:

    //the login function
    authService.login = function(user, success, error) {
        api.Auth.login(null, user).then(
            function(response) {
                var loginData = response;
                authService.getSession();

                $rootScope.$broadcast(AUTH_EVENTS.loginSuccess);
                success(loginData);
            }, function(response) {
                $rootScope.$broadcast(AUTH_EVENTS.loginFailed);
                error(response);
            });
    };

有关更多信息,请参见此SO答案(已投票)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

防止查询字符串被篡改

来自分类Dev

防止使用==进行字符串比较

来自分类Dev

使用Redis防止字符串重复

来自分类Dev

使用Redis防止字符串重复

来自分类Dev

Angularjs $ resource POST发送查询字符串而不是JSON对象(Typescript)

来自分类Dev

防止在查询字符串中将“&reg”替换为“®”

来自分类Dev

防止用户操纵查询字符串参数

来自分类Dev

如何防止用户操作 URL 中的查询字符串?

来自分类Dev

如何使用htaccess防止查询字符串拖到URL的末尾?

来自分类Dev

Mongoose - 5.3.4 - 防止强制转换为 ObjectId 以使用字符串进行查询

来自分类Dev

角$ resource从REST查询字符串中删除问号

来自分类Dev

如何防止哈希转义字符串?

来自分类Dev

PHP regex防止重复的字符串

来自分类Dev

如何防止回溯字符串结尾

来自分类Dev

防止特定字符串分裂

来自分类Dev

防止字符串变量被破坏

来自分类Dev

允许对象文字,防止字符串

来自分类Dev

如何防止某些表单字段显示在查询字符串中?

来自分类Dev

防止通过URL字符串提交基于DDoS的MySQL查询的方法

来自分类Dev

如何防止POST正文中单位长度的数组转换为字符串?

来自分类Dev

如何防止将字符写成字符串?

来自分类Dev

AWS Cloudformation-如何使用字符串参数来防止重复使用相同的字符串

来自分类Dev

使用SQLAlchemy查询防止重复

来自分类Dev

防止多个查询PDO

来自分类Dev

防止无限的mysqli查询

来自分类Dev

防止输入引号等字符

来自分类Dev

防止Vim隐藏字符

来自分类Dev

防止Vim隐藏字符

来自分类Dev

使用字符串格式时如何防止强制使用默认语言