Estoy tratando de hacer una verificación básica de inicio de sesión y contraseña e hice un diccionario para almacenar credenciales. Si ingreso el último inicio de sesión y contraseña, funciona, pero para cualquier otro par, no lo hace.

<h1 class="header">"@success"</h1>
<input placeholder="Login" @bind="@login" />
<input placeholder="Password" @bind="@password" type="text"/>
<button @onclick="@check">check</button>
@functions
{
    private string password,login;
    bool success=false;
    private Dictionary<string, string> creds = new Dictionary<string, string>()
    {
        {"1","2" },
        {"3","4" },
        {"5","6" }
    };




    private void check()
    {

        foreach (var item in creds)
        {
            if (login == item.Key && password == item.Value)
            {
                success=true;
            }
            else
            {
                success=false;
            }
        }
    }
}

Funciona como se esperaba para el último par (5 y 6), el éxito cambia a verdadero. Para los otros pares, no funciona, el éxito sigue siendo falso.

0
czechuuu 6 oct. 2019 a las 11:52

3 respuestas

La mejor respuesta

Agregue un "descanso"; después del éxito = verdadero; y listo

En este momento, después de tener éxito, verifica las siguientes credenciales y no son válidas y restablece su 'éxito'.

0
Holger 6 oct. 2019 a las 09:13

Intenta depurar la declaración. La declaración para cada se procesa para cada entrada en creds. Lo que significa que en cada iteración, la variable de éxito se establece nuevamente en verdadero / falso. Cuando las entradas son iguales al primer o segundo par de créditos, se sobrescribirá en la última iteración, lo que da como resultado que el éxito se establezca en falso.

Debe salir del ciclo foreach cuando el éxito se establece en verdadero.

success = false;
foreach (var item in creds)
{
   if (login == item.key && password == item.value)
   {
      success = true;
      break;
   }
}
3
Rhapsody 6 oct. 2019 a las 08:58

Debe detenerse una vez que establezca success = true

Funciona solo en el último par porque resulta ser el último par y se detiene :)

Será mejor que escriba el código así:

success = creds.ContainsKey(login) && cred[login] == password;

En otra nota, espero que este no sea un código de producción, no debería almacenar contraseñas en texto plano en la memoria o en cualquier otro lugar ...

1
ozba 6 oct. 2019 a las 18:56