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

本文关键字:返回 无效 如果 密码 状态 记录 枚举 何返回 | 更新日期: 2023-09-27 18:29:58

我已经修改了我的验证,如果它找到了记录,我会返回一个枚举类型,以确定用户输入的密码或用户名是否不正确??如我在返回错误密码时所示。

  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, "~");
      }
  }

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

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

  2. 我的建议是创建新的类

    公共密封的UserValidationResult{公共用户用户{get;set;}公共登录状态{get;set;}}

并修改您的方法以返回类似的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; }
}

添加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...}