ajax – 设置HttpContext.Current.User
发布时间:2020-12-16 03:07:19  所属栏目:百科  来源:网络整理 
            导读:我正在开发一个asp.net mvc 3.0应用程序,它具有简单的身份验证过程.用户填写一个表单,该表单通过ajax调用发送到服务器并获得响应,但这里的问题是使用以下方法: FormsAuthentication.SetAuthCookie(person.LoginName,false); 是不足以填充’HttpContext.Curr
                
                
                
            | 
 我正在开发一个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. 
  
  >如果已经过身份验证,请不要做任何事情 在调用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所述. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
