2014-11-08 104 views
0

使用实体框架我想正确的认证例程,它允许检查密码和用户名,但如何使用LINQ我会修改我的查询,以允许单独检查用户名和密码在脑海我必须使用加密为什么我有这个if语句。使用linq验证用户名和密码?

public LoginStatus validateUser(string username, string userPassword) 
    { 
     var _currentUser = _db.users.FirstOrDefault(a => a.username == username); 

     if (_currentUser != null) 
     { 
      if (isEncryptionEnabled == true) 
      { 
       string descriptedPassword = encrypt.DecryptRijndael(_currentUser.password, _currentUser.salt.ToString()); 

       if (descriptedPassword == userPassword) 
        return LoginStatus.ValidUser; 
      } 
      else 
      { 
       var _unecryptedUser = _db.users.FirstOrDefault(a => a.username == username && a.password == userPassword); 

       if (_unecryptedUser != null) 
        return LoginStatus.ValidEncryptedUser;//zero represents sufcessfull login attempts 
      } 
     } 
     else 
     { 
      _loginAttempts++; 
     } 
     return _loginAttempts; 

回答

0

通常最好使用LINQ通过ID拉回用户记录。如果不匹配,则返回用户未找到。然后检查密码是否与数据库中存储的内容匹配。

此外,你正在返回一个枚举和int在底部;你不应该返回invalidattempt枚举值或类似的东西?此外,建议不要存储明文密码,并且始终进行加密。您可以加密值,然后检查加密值匹配...

编辑:如果需要返回多个字段,可以创建一个包装类:

public class Results 
{ 
    public EnumType Status { get; set; } 

    //some other fields 
} 
+0

@Brain电源你会建议那么当你用id表示你的意思是你的名字,那么你会建议我以validuser的形式返回一个bollean值 – rogue39nin 2014-11-08 16:50:36

+0

是的,返回记录。如果没有记录,则不存在用户。如果一个记录,然后检查密码。返回描述问题的枚举(nouser,passwordinvalid等)。 – 2014-11-08 19:07:11

+0

如何通过一个proecdure返回一个enumaration和一个记录类型 – rogue39nin 2014-11-10 16:24:16