我正在使用密码更改方法,此视图由许多条件之一强制执行。第一个条件是数据库中的LastLoggedin字段是否为空。我在测试数据库中将此字段设置为null以强制密码更改事件。
我已经编写了一个在执行某些测试后更改密码的方法,但我无法通过第一个测试,因为click事件调用的控制器方法将用户返回到登录方法,该方法依次检查LastLoggedin数据库中的字段仍为空,因为我还没有登录。我尝试使用以下代码从我的更改密码方法中更改该值:
public bool SavePassword(UserModel user, PasswordRecoveryModel password)
{
try
{
string newPass = password.PasswordNew;
string newHash = PasswordManager.EncryptPassword(newPass);
User domainObject = UnitOfWork.UserRepository.GetItem(user.EntityId);
bool hasUsedPassword = UnitOfWork.UserRepository.HasHadPassword(domainObject, newHash, DateTime.Now.AddMonths(-6));
if (hasUsedPassword.Equals(true))
{
return true;
}
User lastLogged = UnitOfWork.UserRepository.GetItem(user.EntityId);
lastLogged.LastLoggedIn = DateTime.Now;
lastLogged.VerifiedOn = DateTime.Now;
UnitOfWork.UserRepository.Update(lastLogged);
lastLogged.VerifiedOn.Equals(DateTime.Now);
lastLogged.LastLoggedIn.Equals(DateTime.Now);
user.Password = newHash;
user = SaveModel(UnitOfWork.UserRepository,
user,
Mapper.User.ModelToDomain,
Mapper.User.DomainToUserModel);
CommitTransaction();
return false;
}
catch (Exception ex)
{
OnServiceException(ex);
throw;
}
}
但是我仍然没有得到除数据库中保存的新密码以外的任何内容,我通过对用户名运行查询来验证这一点。如何更新此字段,以便我可以通过此测试获得密码更改,甚至可以接受这样做?在我们的旧产品中,它以非常复杂的方式完成,创建一个临时用户对象ant,使用它来通过测试并进行下一个测试。我正在努力简化这个过程。
我是MVC新手,一般编程任何帮助都会受到赞赏。
编辑发现我的问题,像往常一样思考问题,这里是更新的代码:
if (hasUsedPassword.Equals(true))
{
return false;
}
user.LastLoggedIn = DateTime.Now.ToString();
user.Password = newHash;
user = SaveModel(UnitOfWork.UserRepository,
user,
Mapper.User.ModelToDomain,
Mapper.User.DomainToUserModel);
CommitTransaction();
return true;