Нужна помощь с аутентификацией имени пользователя и pswd через массив в javascript

#javascript #xml

#javascript #xml

Вопрос:

Всем привет
Вопрос, который я задаю, в основном касается Javascript. Во-первых, я не очень хорошо разбираюсь в технических терминах, так что потерпите, если я не совсем понимаю.
В любом случае, моя цель — аутентифицировать процесс входа в систему, имя пользователя и пароль, где оба аргумента существуют в массиве, который заполняется XML-файлом. По сути, массив содержит информацию из XML-файла, и имя пользователя и пароль также находятся в этом массиве. Для входа пользователя в систему введенные имя пользователя и пароль должны находиться внутри массива, иначе возвращается сообщение об ошибке. Моя проблема в том, что я не уверен, какой синтаксис я предполагаю использовать при представлении индекса в массиве, и я не уверен, что синтаксис, который я использую, вообще правильный. Все, что я знаю, это то, что он аутентифицировал первое имя пользователя и пароль в массиве и XML-файле, но все остальное рассматривается как неверное, даже если оно правильное.

Вот мой файл Javascript:

 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

//DEFINE LOAD METHOD
function LoadXML(xmlFile)
{
 xmlDoc.load(xmlFile);
 xmlObj = xmlDoc.documentElement;
}

//declare amp; initialize array
var arrPerson = new Array()

//initialize array w/ xml
function initialize_array()
{
LoadXML("PersonXML.xml");
var x = 0;
while (x < xmlObj.childNodes.length)
{
    var tmpArr = new Array(xmlObj.childNodes(x).getAttribute("Usrname"), 
                           xmlObj.childNodes(x).getAttribute("Pswd"), 
                           xmlObj.childNodes(x).getAttribute("FirstName"), 
                           xmlObj.childNodes(x).getAttribute("LastName"), 
                           xmlObj.childNodes(x).getAttribute("DOB"),
                           xmlObj.childNodes(x).getAttribute("Gender"),  
                           xmlObj.childNodes(x).getAttribute("Title"));
    arrPerson.push(tmpArr);
    x  ;   
}
}

//Validation
function LogInVal(objtxt)
{
    if(objtxt.value.length == 0)
    {
        objtxt.style.background = "red";
        return 1;
    }

    else
    {
        objtxt.style.background = "white";
        return 0;
    }
}

//main validation
function MainVal(objForm)
{
    var errmsg = "empty field";
    var errmsg2 = "Incorrect Username and Password";
    var msg = "You have logged in successfully";
    var errCount = 0;

    var usrname1 = document.getElementById("usrname1").value;
    var pswd1 = document.getElementById("pswd1").value;

    errCount  = LogInVal(objForm.usrname);
    errCount  = LogInVal(objForm.pswd);

    if (errCount != 0)
    {
        alert(errmsg);
        return false;
    }
    else
    {
        initialize_array();
        for (x = 0; x < arrPerson.length; x  ) 
        {
            if (arrPerson[x][0] == usrname1 amp;amp; pswd1 == arrPerson[x][1])  //I think my problem is within here
            {
                alert(msg);
                return true;
            }

            else
            {
                alert(errmsg2);
                return false;
            }
        }
    }

}
  

И вот мой XML-файл:

 <?xml version ="1.0" encoding="utf-8" ?>
<!--GGFGFGFVBFVVVHVBV-->
<PersonInfo>
  <Person Usrname="Bob111" Pswd="Smith111" personid="111" FirstName="Bob" LastName="Smith" DOB="01/01/1960" Gender="M" Title="Hello1"> 
  </Person>
  <Person Usrname="Joe222" Pswd="Johnson222" personid="222" FirstName="Joe" LastName="Johnson" DOB="12/01/1980" Gender="M" Title="Hello2">
  </Person>
  <Person Usrname="Tracey333" Pswd="Wilson333" personid="333" FirstName="Tracey" LastName="Wilson" DOB="12/01/1985" Gender="F" Title="Hello3"> 
  </Person>
  <Person Usrname="Connie444" Pswd="Yuiy444" personid="444" FirstName="Connie" LastName="Yuiy" DOB="12/01/1985" Gender="F" Title="Hello4">
  </Person>
  <Person Usrname="Brian555" Pswd="Dame555" personid="555" FirstName="Brian" LastName="Dame" DOB="12/01/1985" Gender="M" Title="Hello5"> 
  </Person>
  <Person Usrname="Scott666" Pswd="Bikes666" personid="666" FirstName="Scott" LastName="Bikes" DOB="12/01/1985" Gender="MF" Title="Hello6">  
  </Person>
</PersonInfo>
  

Комментарии:

1. Существует так много проблем с подходом, что я не знаю, с чего начать.

2. Я предполагаю, что проблема в том, что способ, которым я это сделал, и это не работает или используется в реальном мире? Если это так, не обращайте на это внимания. Мне просто нужно это, чтобы выполнить требование чтения цикла для аутентификации процесса входа в систему и заставить его работать. Этот проект ориентирован исключительно на клиента, в нем вообще нет серверных технологий.

Ответ №1:

Хорошо, во-первых. Вы должны были упомянуть, что это назначение, а не приложение реального мира. хе-хе.

Хорошо, ваши проблемы просты, в обеих ветвях вашего оператора if вы ВОЗВРАЩАЕТЕ, что фактически оставляет функцию на первой итерации. Возвращайте только тогда, когда либо имя проверено, либо у вас закончились люди для проверки.

PS: Неплохо бы хорошо изучить этот шаблон. Он часто используется в программировании в целом

 else
    {
        initialize_array();
        for (x = 0; x < arrPerson.length; x  ) 
        {
            if (arrPerson[x][0] == usrname1 amp;amp; pswd1 == arrPerson[x][1])  // This is fine
            {
                alert(msg);
                return true;
            }

            // We must not do this if we still have work to do. 
            //else
            //{
            //    alert(errmsg2);
            //    return false;
            //}
        }

        // Moved to outside the loop. IE: We have no one else to validate
        // therefore the username and password combo is invalid.
        alert(errmsg2);
        return false;

    }
  

Ответ №2:

Выполняете ли вы проверку входа в браузере? Если это так, то это не очень хорошая идея, поскольку опытный пользователь может использовать что-то вроде Firebug или Fiddler, чтобы просто видеть имена пользователей и пароли при передаче их в браузер.

Вам нужно выполнить проверку входа на сервере.

Комментарии:

1. Да, это делается в браузере, потому что это одно из требований. Я рвал на себе волосы последние 3 дня, пытаясь заставить это работать.

2. Ваше требование совершенно неверно. При таком подходе у вас может даже не быть никакой формы аутентификации. Вы не только компрометируете систему, но и отправляете каждое имя пользователя и пароль в виде обычного текста.

3. Ну, я не тот, кто устанавливает требование. Мой профессор, я должен строго следовать его требованиям для этого проекта. Из того, что он сказал мне, единственная проблема, с которой я сталкиваюсь, находится в этой строке. Если есть другие проблемы, вы можете указать на них.

4. Хорошо, итак, школьное задание. Смотрите ответ