【发布时间】: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