如果密码无效,我如何返回枚举状态,如果是,则返回记录

时间:2014-11-10 16:31:48

标签: c# entity-framework authentication

我已经修改了我的验证以返回记录,如果它找到了一个,但我怎么还会返回一个枚举类型来识别用户输入的密码或用户名是否错误? 例如,我在回复中显示了错误的密码。

  public user isValidUser(string username, string userPassword)
  {
      try
      {
          var _currentUser = _db.users.FirstOrDefault(a => a.username == username);

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

              if (descriptedPassword == userPassword)
                  return _currentUser;
              else
                  return recordEnum.invalidPassword  ????
          }

      }
      catch (Exception ex)
      {
          Mercentwarehousecms
              .Logging
              .ExceptionUtility
              .LogErrorMessage("isValidUser Error DB Context", ex, "~");
      }
  }

2 个答案:

答案 0 :(得分:1)

添加out参数:

public user isValidUser(string username, string userPassword, out LoginStatus loginStatus)
{
...
}

enum LoginStatus
{
  success,
  badPassword,
  badUsername
}

因此,在您的代码中设置loginStatus的值以反映发生的情况。通常我会在出现问题时将返回值设置为null,并使用enum描述问题。

调用这样的方法:

LoginStatus result;
user userResult = isValidUser(username, password, out result);//Be sure to use the word "out" before your paramter
if (result == LoginStatus.success)
  {//Yay!}
else if (result == LoginStatus.badPassword)
  {//awww...}
else if (result == LoginStatus.badUsername)
  {//awww...}

答案 1 :(得分:1)

  1. isValidUser名称听起来应该返回bool

  2. 我的建议是创建新类

    公开密封的UserValidationResult {    公共用户用户{get;组; }    public LoginStatus Status {get;组; } }

  3. 并修改您的方法以返回UserValidationResult,如

    public UserValidationResult CheckUser(string userName, string userPassword)
    {
      var user = GetUser(username, userPassword);
      return user != null ? 
           new UserValidationResult { Status = LoginStatus.Sucess, User = user }
         : new UserValidationResult { Status = LoginStatus.Failed; }
    }