ASP.. NET MVC 4 web安全.CurrentUserId返回-1
本文关键字:CurrentUserId 返回 安全 web NET MVC ASP | 更新日期: 2023-09-27 18:10:11
我在ASP中使用simplememmembership。. NET MVC 4项目。在我登录后,我无法获得当前的UserName和当前的UserId,这是我的login函数:
[HttpPost]
public ActionResult Login(FormCollection form)
{
bool success = WebSecurity.Login(form["username"], form["password"], false);
if (success)
{
string returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl == null)
{
Response.Redirect("~/home/index?userId=" + WebSecurity.CurrentUserId + "&userName=" + WebSecurity.currentUserName);
}
else
{
Response.Redirect(returnUrl);
}
}
return View();
}
在这一行Response.Redirect("~/home/index?userId=" + WebSecurity.CurrentUserId + "&userName=" + WebSecurity.currentUserName);
WebSecurity.CurrentUserId
返回-1
, WebSecurity.currentUserName
返回""
我错过了什么吗?如有任何帮助,不胜感激。
然而,在我的视图中,如果我这样做@{ int value; value = WebSecurity.currentUserID; } @{ ViewBag.Title = value; }
浏览器的标题是正确的currentUserId
try this
[HttpPost]
public ActionResult Login(FormCollection form)
{
bool success = WebSecurity.Login(form["username"], form["password"], false);
if (success)
{
var userId = WebSecurity.GetUserId(form["username"]);
string returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl == null)
{
Response.Redirect("~/home/index?userId=" + userId + "&userName=" + WebSecurity.currentUserName);
}
else
{
Response.Redirect(returnUrl);
}
}
return View();
}
WebSecurity在重定向完成之前不会内部化(按照设计)。一种解决方法是在成功登录时通过username获取userID
MSDN:
当用户登录时,ASP。属性中设置身份验证令牌cookie,让ASP。. NET在随后的请求中知道用户所拥有的已登录。如果persistCookie为false,则该令牌仅有效直到用户关闭浏览器。
所以它只能在你登录后的请求中使用。用途:
WebSecurity.GetUserId(username);