2017-05-28 196 views
-2

因此,我有一个登录名,并且正在使用Linq,C#来检查是否存在适合用户输入的一对用户名/密码。如果有,则存储在用户变量中。如果user==null,登录失败,如果user!=null成功!现在,我加密了我的通行证,我需要重做登录代码,以便可以比较用户输入和存储在数据库中的散列通行证。我使用这个类来凑:将用户输入与来自db的散列密码进行比较#

https://stackoverflow.com/a/32191537/1695100

我的登录代码

private void button_LogInEntrar_Click(object sender, EventArgs e) 
{ 
    string username = tb_LogInUsername.Text; 
    string password = tb_LogInPass.Text; 

    User userAdmin = (from admin in dbATMT.UserSet.OfType<Administrator>() 
    where admin.Username.Equals(username) && admin.Password.Equals(password) 
    select admin).FirstOrDefault(); 

    if (userAdmin == null) 
    { 
     MessageBox.Show("Invalid"); 
    } 
    else 
    { 
     //logs in 
    } 
} 
+1

从LogInPass.Text字段提取密码值后,可以在使用LINQ表达式之前应用相同的加密/散列逻辑。 – Gururaj

+0

我的疑问是,如果验证方法返回一个布尔值,如何使用linq查询检查用户输入和数据库数据是否相等? –

+0

可能是我错过了这里的东西。验证方法在哪里定义,它在做什么。你能否在它周围添加一些细节? – Gururaj

回答

0

你可能想在LINQ的表达外比较密码,这样的:

User userAdmin = (from admin in dbATMT.UserSet.OfType<Administrator>() 
where admin.Username.Equals(username) select admin).FirstOrDefault(); 

         if (userAdmin == null || !admin.Password.Equals(password)) 
         { 
          MessageBox.Show("Invalid"); 
         } 
         else 
         { 
          //logs in 
         } 
+0

和我在哪里散列用户输入密码,并将其与bd? –

+0

啊,我明白了。尝试“如果(用户管理== null ||!SecurePasswordHasher.Verify(密码,admin.Password))”而不是 – stl

+0

nop ...我想这个类inst非常适合我想要的 –

相关问题