我基本上有两个屏幕。第一个屏幕将用户名作为输入并生成密码。密码仅在30秒内有效。一旦生成密码,我需要将用户重定向到下一个屏幕,并允许他在另一个屏幕上使用该密码。我试图用密码填充用户模型对象并将其传递给scecond视图,但我的第二个视图似乎没有得到数据。请找到以下代码
int otpass;
bool conversion = Int32.TryParse(Encryption.GetPassword(user), out otpass);
if (conversion)
{
//Save user credentials.
userModel.Login = user;
userModel.Otp = otpass;
string otp1 = otpass.ToString();
userModel.OtpCrtDate = DateTime.Now;
ViewData["user"] = userModel.Login;
ViewData["password"] = Convert.ToString(otpass) ;
ViewData["status"] = "OTP: " + otpass + " remains active just 30 seconds from now.";
return View("Access",userModel);
//return View("UserLogin", userModel);
}
有人可以告诉我该如何去做吗?
答案 0 :(得分:0)
最好的办法是将密码保存在您最喜欢的存储机制中。你现在可以使用一个SQL数据库,虽然像Redis或其他NoSQL支持这样的东西会长期更好。您可以存储用户名,密码和表示超时的日期时间。在验证时,您选择超时日期大于或等于现在+ 30秒的记录。
另一种替代方法是将密码存储在TempData
中。请记住,TempData
中的数据只会持续到下一个请求。您看起来这个工作流程至少需要3个请求(POST用户名,GET密码输入表单,POST密码),因此您需要从TempData
检索/重置密码两次以保持足够长的时间。完成工作流程。同样,这不是推荐的路线。它很脏并且容易出错,但是如果你坚持要避免使用数据库,这真的是你唯一的办法。