Member 14915166 Ответов: 1

Как правильно реализовать функцию onclick forgotten password?


Я читаю xml-файл с javascript, и если пользователь нажимает на кнопку "Забыли пароль", появляется модал, где есть еще одна кнопка под названием "получить мой пароль". Если пользователь нажимает на эту кнопку, он должен показать пароль пользователя на основе его идентификатора электронной почты в xml-файле, но моя функция "forgotten ()" по какой-то причине не работает. Пожалуйста, помогите мне, я уже некоторое время борюсь с этим.

Что я уже пробовал:

моя html-форма:
<pre><div class="container">
  <div class="login">
  
    
  	<h1 class="login-heading">Please login.</h1>



      <form method="post" action="login.php">
        
        <input id='email1' type="email" name="email" placeholder="Email Adress" required="required" class="input-txt" onchange="checkuser();"  />  
        <input id='pass1' type="password" name="password" placeholder="Password" required="required" class="input-txt" />
		
        <input type"button" name="forgot" class="btn" data-target="#pwdModal" data-toggle="modal" value="Forgot password?">
<div id="pwdModal" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
  <div class="modal-dialog">
  <div class="modal-content">
      <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
          <h1 >Forgot My Password?</h1>
      </div>
      <div class="modal-body">
          <div class="col-md-12">
                <div class="panel panel-default">
                    <div class="panel-body">
                        <div class="text-center">
                          
                          <p>If you have forgotten your password, simply click on the button below to fetch your password from the server!</p>
                            <div class="panel-body">
                                <fieldset>
                                    
                                    <div id="forgot">
			 <input type="button" class="btn" value="Get my password" tabindex="2" onclick="forgotten();"><br> <br>
                         <p id="pass" style="border-style:dotted;border-color:coral; border-radius:5px;"></p>
             <script>
			 var forgot_email = document.getElementById("email1");
             

             var request1 = new XMLHttpRequest();

             //fetching the password based on the email address
             request1.open("GET", "storedata.xml", false);
             request1.send();

             var xml1 = request1.responseXML;
             var users1 = xml1.getElementsByTagName("data");
			 
			 function forgotten {
             for(var i = 0; i < users1.length; i++) {
             if (forgot_email == users1[i].getElementsByTagName("email2").value {
             var forgotten_pass= users1[i].getElementsByTagName("pass2").value;
			 break;
             }
    
             } 
			 document.getElementById("pass").innerHTML=forgotten_pass;
             }
			 </script>
			 
	
                
			 </div>   
                                </fieldset>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
      </div>
      <div class="modal-footer">
          <div class="col-md-12">
          <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
		  </div>	
      </div>
  </div>
  </div>
</div>
			
             <button type="submit" class="btn" name="ok" id="b1" >Sign in </button> <br> <br>
	
      </form>
	  
	  <script>
             
//checking if the email exists in the server xml or not
var first_email = document.getElementById("email1");

var request = new XMLHttpRequest();

//creating an array of the existing emails
request.open("GET", "storedata.xml", false);
request.send();

var xml = request.responseXML;
var users = xml.getElementsByTagName("data");
const existingEmails = [];

for(var i = 0; i < users.length; i++) {
    const emailTag = users[i].getElementsByTagName("email2");
    const email = emailTag[0].childNodes[0].nodeValue;

    existingEmails.push(email);
}

function checkuser() {
 if(existingEmails.includes(first_email.value)) {
      email1.setCustomValidity('');
 }
 else {
 email1.setCustomValidity('Sorry but this email address doesnt exist in the server.');
 }
}


</script>        
	  	 
 
  </div>
</div>

мой xml-файл(storedata.xml) :
<pre><?xml version="1.0" encoding="utf-8"?>
<document>
<data><fname>Group</fname><lname>Project</lname><email2>webuy55@gmail.com</email2><pass2>teamproject55</pass2></data>
<data><fname>Sam</fname><lname>Kim</lname><email2>samkim@gmail.com</email2><pass2>abcd1234</pass2></data>
<data><fname>Harold</fname><lname>Pain</lname><email2>hpain@gmail.com</email2><pass2>abcd</pass2></data>
<data><fname>Ryan</fname><lname>Reynold</lname><email2>ryan@gmail.com</email2><pass2>123456</pass2></data>
<data><fname>Reece</fname><lname>Simpson</lname><email2>reece@gmail.com</email2><pass2>onlinestore</pass2></data>
<data><fname>Stefani</fname><lname>Germanotta</lname><email2>stef@gmail.com</email2><pass2>bbbcccddd</pass2></data>
</document>

Sandeep Mewara

Есть webuy55@gmail.com работают и другие не так, как ожидалось?

1 Ответов

Рейтинг:
1

OriginalGriff

Плохая идея, очень плохая.
Единственный способ сделать это-хранить пароли пользователей, и это небезопасно.
Никогда не храните пароли в открытом виде - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]

И помните: если это веб-сайт и у вас есть какие-либо пользователи из Европейского союза, то применяется GDPR, а это означает, что вы должны обрабатывать пароли как конфиденциальные данные и хранить их безопасным и безопасным способом. Текст-это ни то, ни другое, и штрафы могут быть ... ГМ ... выдающийся. В декабре 2018 года немецкая компания получила относительно низкий штраф в размере 20 000 евро именно за это.

Вместо "вот ваш пароль" вы устанавливаете временный пароль (срок действия которого истекает, скажем, через 24 часа) и разрешаете им войти либо с этим (в этом случае вы устанавливаете его в качестве нового пароля и позволяете им изменить его), либо с оригинальным (в этом случае вы отбрасываете временный).
Мне нравится использовать Guid, потому что никто не хочет его вводить, и это побуждает их установить ему новое значение ...