通过 Ajax 验证用户名/密码
Validating username/password through Ajax
我正在尝试使用Ajax来验证存储在服务器上php文档中的用户名和密码。用户名和密码预先存储在文档中。
在我的 HTML 页面上有一个用户名字段和一个密码字段。然后,当他们单击登录按钮时,它会调用以下函数:
function checkLogin() {
var user = document.getElementById("username").value;
var password = document.getElementById("password").value;
var data = "userName=" + user + "&password=" + password;
var request = new XMLHttpRequest();
request.open("POST", "check.php", false);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(data);
if (request.status === 200) {
window.open("test.html");
} else {
var messageSpan = document.getElementById("response");
var responseJson = JSON.parse(request.responseText);
messageSpan.innerHTML = "Your password of " + responseJson["password"] + " was not corerct. Please try again.";
}
}
我遇到的问题是,如果用户名/密码不正确,它永远不会到达其他位置。即使字段中没有任何内容,也会打开新页面。我做错了什么让它认为所有数据都是正确的?
注意:上述代码仅用于测试目的,在发布网页时实际上不会使用。我只是想看看发生了什么,并在继续之前让它工作。谢谢。
很可能
您的检查.php在响应时回显出真或假 在某些情况下,您在成功时回显出用户 ID。无论如何,您的响应代码为 200 表示成功的服务器通信。检查请求.响应文本,以防得到 200。
if (request.readyState == 4 && request.status === 200) {
var responseJson = JSON.parse(request.responseText);
if (responseJson['success'] == 1){
window.open("test.html");
} else {
var messageSpan = document.getElementById("response");
messageSpan.innerHTML = "Your username and password combination was incorrect.";
}} else {
//For debugging purpose add an alert message here. alert(request.status);
messageSpan.innerHTML = "A server connection error occurred!"; }
很明显,您正在发回 json 响应。因此,您可以添加一个名为 success 的节点,其值为 true 或 false,以检查登录的成功。不过,在响应消息中显示密码不是一个好做法。
问题是你每次都从你的check.php
那里获得 200 的状态。在你的check.php
你需要做一些事情,比如
// let validate() be function that validates your username/password
// and returns true/false on validation
if(validate()){
http_response_code(200);
} else {
http_response_code(401);
}
希望对您有所帮助
简单地说,
你可以像这样使用Ajax,
<script>
function checkLogin() {
var user = document.getElementById("username").value;
var password = document.getElementById("password").value;
$.ajax({
xhr: function() {
var xhr = new window.XMLHttpRequest();
//progress
xhr.upload.addEventListener("progress", function(e) {
//progress value e
}, false);
return xhr;
},
type: "POST",
url: "check.php",
data: {'userName' : user , 'password' : password},
dataType:json,
success: function(msg) {
//when success //200 ok
if(msg.status=="done"){
window.open("test.html");
}else{
var messageSpan = document.getElementById("response");
messageSpan.innerHTML = "Your password of " + msg.password+ " was incorrect.";
}
},
error: function(jqXHR, textStatus, errorThrown) {
//when error
}
});
}
</script>
你的PHP服务器端是这样的,
//$status="fail" or "done"
//success must be always success
$respond=array("success"=>"success","status"=>$status,"password"=>$password);
echo json_encode($respond);
exit;
我认为这对你有用!
相关文章:
- 一个密码测试程序,如果存在空格,它会提醒用户
- 正确传输和保护用户'web应用程序的密码
- Firebase电子邮件/密码创建用户安全
- 更改错误文本“用户 ID 或密码不正确”
- 如何为在客户端检查其密码的用户创建登录页面
- Javascript 密码不应包含用户的帐户名或用户全名中超过两个连续字符的部分
- 正在云代码中检索用户密码
- 如何创建一个提示用户输入登录id和密码的网站
- 有没有一种安全的方法可以将 React.js 与 Python Flask 后端用于多用户、受密码保护的站点
- 如果用户在发布之前没有设置密码,请重定向用户
- 如何在文本框中缩进文本和光标的起始位置(用户、密码等)
- 在客户端JavaScript中存储Web应用程序的用户密码 - 这是安全的吗?
- 在 document.ready 上保存的用户/密码为空
- 流星:在不注销的情况下更改用户密码
- 使用电子邮件和密码错误对用户进行身份验证
- 如何提示用户在 HTML/JS 中输入密码,让他们无法在页面源代码中找到密码
- 带有护照的节点:比较密码抛出错误未定义不是一个函数,当它返回返回完成(null,用户);
- 如何在输入错误的用户名和/或密码时将用户从登录控件重定向到错误页面
- 是否可以在不使用帐户密码包的情况下获取流星用户ID
- 角度验证:如果用户输入无效的电子邮件或密码,则限制服务器请求