使用linq验证用户名和密码?

时间:2014-11-08 15:01:05

标签: c# entity-framework authentication

使用实体框架我试图纠正一个允许检查密码和用户名的身份验证例程,但是如何使用linq修改我的查询以允许单独检查用户名和密码,请记住我必须使用加密这就是为什么我有if语句的原因。

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;

1 个答案:

答案 0 :(得分:0)

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

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

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

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

   //some other fields
}