【问题标题】:Sporadic 400 (Bad Request) by same service同一服务的零星 400(错误请求)
【发布时间】:2019-05-26 08:26:03
【问题描述】:

这是一个简单的登录表单,大多数用户都可以正常使用,但由于某些原因,有几个用户在尝试登录时收到 400(错误请求)。他们使用的用户名没有什么特别之处——有特殊符号、特殊词等。

我已经尝试过几次更改数据格式或使用用户名和密码的JSON.stringify(),但最终不仅有问题的用户无法登录,其他所有用户都无法登录。

    $('#submit').click(function() {
            username = $('#username').val();
            password = $('#password').val();
            $.ajax({
                type: 'POST',
                url: '/auth/signin',
                data: 'username=' + username + '&password=' + password,
                success: function(json) {
                    location.reload(true);
                },
                error: function (xhr, ajaxOptions, thrownError) {

                        $('#login-error').html('Invalid username/password');
                }
            });
            return false;
        });

即使我尝试查看 throwedError,它也只会给我“错误”

jquery.js:4 POST http://website/auth/signin 400(错误请求)
发送@jquery.js:4
ajax@jquery.js:4
(匿名)@ login.js:39
调度@jquery.js:3
r.handle @ jquery.js:3

错误请求
错误

jQuery v1.11.1

我怎样才能看到 POST 可执行文件,因为即使在 chrome 检查的网络选项卡中也没有注册任何内容?如何使用一个数据(用户/密码 - 它们是有效的),但不能使用其他数据,只是使用不同的字符序列?

使用 encodeURIComponent 作为用户/密码解决了这个问题
更多信息感谢 Andreas 至:
Does ajax post data need to be URI encoded?

【问题讨论】:

  • 您能添加一些无效的用户名/密码示例吗?
  • “用户名没有什么特别的” - 也许不是用户名,而是密码。 php - Does ajax post data need to be URI encoded?
  • 谢谢,安德烈亚斯 - 是的,这就是问题所在。我正在使用 passport-ldapauth 模块,在对模块的代码进行逆向工程后,我注意到它应该被编码。有趣的是,使用encodeURI 不起作用,而只能使用encodeURIComponent。猜猜是因为如果您正在编码一个字符串以放入一个 URL 组件(一个查询字符串参数),您应该调用 encodeURIComponent。如果要编码现有 URL,请调用 encodeURI

标签: javascript jquery ajax login mean-stack


【解决方案1】:
 $('#submit').click(function() {    
        fire_ajax_submit();
});

function fire_ajax_submit() {
    // PREPARE FORM DATA
    var formData = {
        username  : $("#username").val(),
        password  :  $("#password").val()

    }

    var protocol = window.location.protocol;
    var host = window.location.host;
    var pathArray = window.location.pathname.split('/');
    var pathName = pathArray[1];
    $.ajax({
        type : "POST",
        contentType : "application/json",
        url : protocol + "//" + host + "/" + pathName + "/auth/signin",
        data : JSON.stringify(formData),
        dataType : 'json',
        cache : false,
        success : function(data) {
            //doSomthing

        },
        error : function(e) {
            console.log("ERROR : ", e);         

        }
    });

}

【讨论】:

  • 请在您的纯代码答案中添加解释,说明您所做的更改,以及为什么这会解决问题。但是在这种特殊情况下:"我已经尝试过多次改变数据格式或者或使用JSON.stringify()"跨度>
猜你喜欢
  • 1970-01-01
  • 2012-04-27
  • 2015-11-24
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2011-09-29
  • 2014-01-11
相关资源
最近更新 更多