Weeman Osekre Ответов: 1

C# с аутентификацией входа в систему XML


So I have this code to Authentic authenticate my user but it only loop through the first user and and other username it gives me wrong password or username. Any help please


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

XmlDocument mac = new XmlDocument();
               mac.Load(@"C:\Users\user\source\repos\lilis shop\lilis shop\Properties\XMLFile1.xml");
               XmlNodeList xnlist = mac.SelectNodes("//users");

               foreach (XmlNode naa in xnlist)
               {
                   string username = naa["username"].InnerText;
                   string password = naa["password"].InnerText;

                   if (username == txtusername.Text && password == txtpassword.Text )
                   {
                       Letsee = "LOGEDIN";
                       Form1 openform = new Form1();
                       openform.lablogin.Text = Letsee;
                       openform.lab1.Text = this.txtusername.Text;
                       openform.labelsingout.Text = "SINGOUT";

                       openform.Show();

                       this.Hide();
                       break;
                   }
                    else if (username != txtusername.Text)
                   {
                       MessageBox.Show("please enter the correct username", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                       txtpassword.Text = null;
                       txtusername.Text = null;
                       break;

                   }
                   else if (password != txtpassword.Text)
                   {
                       MessageBox.Show("please enter the correct password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                       txtpassword.Text = null;
                       txtusername.Text = null;
                       break;

                   }

                   else
                   {
                       MessageBox.Show("please enter the correct password or username", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                       txtpassword.Text = null;
                       txtusername.Text = null;
                       break;


                   }

1 Ответов

Рейтинг:
1

MadMyche

Я вижу множество проблем с вашим кодом:

Фактическая проблема, о которой вы спрашиваете, заключается в том, что каждая ветвь вашего блока if...then заканчивается a break что останавливает цикл. Единственный способ проверить кого-то-это если первая комбинация имени пользователя и пароля является правильной.

Следующая проблема-это безопасность этого; ваши пароли хранятся в обычном тексте. Предпочтительный способ сохранения паролей-это соленая окрошка, второе место к этому будет использовать какое-то шифрование.

Еще одна проблема, связанная с безопасностью, заключается в том, что он слишком полезен с ответами. Вы должны только сказать кому-то, является ли его логин действительным или недействительным. Сказать кому-то, что его пароль неверен, - это также сказать ему, что у него есть действительное имя пользователя. Хакер тогда будет иметь половину комбинации, чтобы войти.

Кроме того ... логика просто неправильная. Слишком много else if комбинации там; когда все, что вам нужно, это вложенное IF:

for loop {
   If username matches {
      if password matches {
         login succeeded
         break loop
      }
   }
   // continue through loop
}
// loops done: If we didn't succeed by now, we failed. No THEN needed
Так что вы должны закончить с чем-то вроде этого
XmlDocument mac = new XmlDocument();

mac.Load(@"C:\Users\user\source\repos\lilis shop\lilis shop\Properties\XMLFile1.xml");
XmlNodeList xnlist = mac.SelectNodes("//users");

foreach (XmlNode naa in xnlist)
{
   string username = naa["username"].InnerText;
   string password = naa["password"].InnerText; 

   if (username == txtusername.Text) {
      if (password == txtpassword.Text) {
         Letsee = "LOGEDIN";
         Form1 openform = new Form1();
         openform.lablogin.Text = Letsee;
         openform.lab1.Text = this.txtusername.Text;
         openform.labelsingout.Text = "SINGOUT";

         openform.Show();

         this.Hide();
         break;
      }
   }
}
MessageBox.Show("Login Failed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtpassword.Text = null;
txtusername.Text = null;


0x01AA

+5

MadMyche

Спасибо

Weeman Osekre

Спасибо человек но этот код все еще распознает только первого пользователя а другой пользователь неверен

MadMyche

Я бы рекомендовал установить точку останова в начале цикла и пройти через нее, чтобы увидеть, какие значения происходят там. Обратите пристальное внимание, когда вы думаете, что у вас есть матч собирается в него