我正在使用VS 2010和MVC4(Razor)开发应用程序。我坚持使用Url参数。我能够实现LogIn方法。一旦我验证用户,我希望他重定向到其他页面,所以我正在使用
RedirectToAction("UserAction","User",new{userID = "",password=""});
但问题是RedirectToAction使用HTTTPGet所有url参数userID和密码都可见。
如何使用HTTPPost调用RedirectToAction。
任何帮助都将受到高度赞赏。 这是我的Login.cshtml
@using (Html.BeginForm("SignIn", "Login", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Log in Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName, new { id = "UserName" })
@Html.ValidationMessageFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password, new { id = "Password" })
@Html.ValidationMessageFor(m => m.Password)
</li>
</ol>
<input type="submit" value="Log in"/>
</fieldset>
}
这是我的登录控制器
bool IsValidUser = ValidateEachUser(oLoginModel.
UserName,oLoginModel.Password);
if (IsValidUser)
return (RedirectToAction("UserDetails", "User", new { userID = userID,
password =
password }));
else
return View("Login");
Thanx和问候
答案 0 :(得分:1)
解决方案就像@anaximander提到的那样。成功登录后,将用户详细信息保存在随每个请求提交的加密cookie(例如FormsAuthenticationTicket)中,然后您可以通过解密cookie来验证每个操作调用的凭据。如果您想实现自己的验证协议,您甚至可以实现自己的AuthorizeAttribute并手动装饰所有方法或在Global.asax中全局注册(在RegisterGlobalFilters内)。
您应该考虑是否确实需要保留密码。用户请求包含加密cookie的事实可用作用户已经过身份验证的指示。如果要确保用户有权运行某种操作方法,则用户ID应该足够。这将节省您必须存储密码并在每次调用时重新检查它,然后检查用户是否有权运行该方法。
答案 1 :(得分:0)
TempData
- 回答您的问题:
TempData["userID "] = "some";
TempData["password"] = "some";
RedirectToAction("UserAction","User");
这可能有用。如果它没有添加评论:)
答案 2 :(得分:0)
如果你想要一个方法HTTPPOST把方法的头像:
[HTTPPOST] RedirectToAction(您的参数){}
答案 3 :(得分:0)
这开始是一些评论,但我认为现在已经足够值得回答。
识别用户的最佳方法可能是使用包含识别令牌的加密cookie - 而不是他们的密码 - 以便您可以检查用户是谁。每次请求都会发送cookie,无需额外的工作。如果需要,可以查看。动作过滤器是一种巧妙的方法。
ASP.NET MVC 4内置了一个非常好的Forms auth系统,其工作方式与此完全相同。那里有很多教程; this one是一个很好的例子。它实现起来非常简单,您可以覆盖一些工作部分以使用您自己的数据库,您自己的用户模型等。用户提供凭据,您检查它们,系统为用户提供cookie。 [Authorize]
过滤器检查该cookie并使用它来决定是否允许用户执行他们正在尝试执行的操作。还有基于角色的授权的范围,但如果您不需要,可以忽略它。
无论你做什么,你都不想在任何地方保留用户的密码。如果您最终使用自己的数据库来存储用户,请不要将密码保存在那里 - 查找类似bcrypt的内容,使用它来使用随机盐散列密码,并将其与salt值一起存储。要检查用户的登录信息,请使用您提供的盐对它们提供的内容进行哈希处理,并查看输出是否与您保存的哈希值匹配。密码保留在系统中的时间越短,攻击者可以抓住它的窗口就越窄。