public ActionResult ResetPasswordByEmailToken(int userID, string token) { ViewData["emailToken"] = token; ViewData["resetUserID"] = userID; var tokenObj = IoC.Resolve<ITokenQuery>().GetIdAndExpiredAtByTokenAndUserIDWhichIsNotUsed(token, userID, Common.TokenType.PasswordReset); if (tokenObj == null) ViewBag.ErrorMessage = this.Lang("Invalid password reset link."); else if (tokenObj.Item2.ToLocalDateTime().AddMinutes(30) < DateTime.Now) ViewBag.ErrorMessage = this.Lang("Reset login password link is expired."); else { var cmd = new TokenUse(tokenObj.Item1); this.CommandBus.Send(cmd); ViewBag.Code = 1; } return View(); }
public void TestTokenUse() { #region 生成token var userID = new Random().Next(1, 10); var email = "email" + userID + "@11.com"; var resetPasswordCmd = new UserForgetPassword(userID); var resetTradePasswordCmd = new UserForgetTradePassword(userID); var user = IoC.Resolve<IUserRepository>().FindById<User>(userID); var oldPasswordToken = user.Membership.PasswordResetToken; var oldTradePasswordToken = user.Membership.TradePasswordResetToken; Assert.DoesNotThrow(delegate { this.commandBus.Send(resetPasswordCmd); }); Assert.DoesNotThrow(delegate { this.commandBus.Send(resetTradePasswordCmd); }); Assert.DoesNotThrow(delegate { this.commandBus.Send(resetPasswordCmd); }); Assert.DoesNotThrow(delegate { this.commandBus.Send(resetTradePasswordCmd); }); #endregion bool exist = false; var tokenID = 0; while (!exist) { tokenID = new Random().Next(1, 10); var existToken = IoC.Resolve<IRepository>().FindById<Token>(tokenID); exist = existToken != null && !existToken.IsUsed; } var tokenUse = new TokenUse(tokenID); Assert.DoesNotThrow(delegate { this.commandBus.Send(tokenUse); }); var ex = Assert.Throws<CommandExecutionException>(delegate { this.commandBus.Send(tokenUse); }); Assert.Equal(ex.ErrorCode, (int)ErrorCode.TokenIsUsedOrTimeOut); var token = IoC.Resolve<IRepository>().FindById<Token>(tokenID); Assert.True(token.IsUsed); }