Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
        }