设置HttpContext.Current.User

我正在开发一个具有简单身份验证过程的asp.net mvc

3.0应用程序。用户填写一个通过ajax调用发送到服务器并获得响应的表单,但是这里的问题是使用以下方法:

FormsAuthentication.SetAuthCookie(person.LoginName,false);

不足以填充“ HttpContext.Current.User”,并且需要运行以下方法:

FormsAuthentication.RedirectFromLoginPage("...");

这里的问题是,正如我提到的,loggin表单使用ajax表单,并使用json获取响应,因此无法进行重定向。

我如何填写’HttpContext.Current.User’?

谢谢。

更新:

这是注册方法:

 [HttpPost]

public ActionResult Register(Person person)

{

var q = da.Persons.Where(x => x.LoginName == person.LoginName.ToLower()).FirstOrDefault();

if (q != null)

{

ModelState.AddModelError("", "Username is repettive, try other one");

return Json(new object[] { false, this.RenderPartialViewToString("RegisterControl", person) });

}

else

{

if (person.LoginName.ToLower() == "admin")

{

person.IsAdmin = true;

person.IsActive = true;

}

da.Persons.Add(person);

da.SaveChanges();

FormsAuthentication.SetAuthCookie(person.LoginName,false);

return Json(new object[] { true, "You have registered successfully!" });

}

}

回答:

这是我最终使用的版本,该版本基于@ AdamTuliper-

MSFT的回答。它仅应在登录后但在重定向之前使用,以允许其他代码访问HttpContext.User

  • 如果已通过身份验证,请勿执行任何操作
  • 不修改Cookie,因为它仅在此请求的生存期内使用
  • 缩短一些内容,并使用userdata使其更加安全(永远不能为null,但是…)

在调用SetAuthCookie()之后调用此函数,如下所示:

// in login function

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

AuthenticateThisRequest();

private void AuthenticateThisRequest()

{

//NOTE: if the user is already logged in (e.g. under a different user account)

// then this will NOT reset the identity information. Be aware of this if

// you allow already-logged in users to "re-login" as different accounts

// without first logging out.

if (HttpContext.User.Identity.IsAuthenticated) return;

var name = FormsAuthentication.FormsCookieName;

var cookie = Response.Cookies[name];

if (cookie != null)

{

var ticket = FormsAuthentication.Decrypt(cookie.Value);

if (ticket != null && !ticket.Expired)

{

string[] roles = (ticket.UserData as string ?? "").Split(',');

HttpContext.User = new GenericPrincipal(new FormsIdentity(ticket), roles);

}

}

}

编辑: 删除对Request.Cookies的调用,如@ AdamTuplier-MSFT所述。

以上是 设置HttpContext.Current.User 的全部内容, 来源链接: utcz.com/qa/420681.html

回到顶部