当前位置: 首页 > 面试题库 >

设置HttpContext.Current.User

邓宜年
2023-03-14
问题内容

我正在开发一个具有简单身份验证过程的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所述。



 类似资料:
  • 我将设置为,并将其添加到我的。当我运行和echo,它们都给了我正确的信息。但是,当我运行libgdx安装程序时,它会给出以下错误:<code>错误:未设置JAVA_HOME,并且在路径中找不到任何“JAVA”命令。 请在您的环境中设置JAVA_HOME变量,以匹配您的JAVA安装位置。 有什么想法吗?

  • 设置菜单 可从主菜单进入设置当功能打开时,轻击以便将图标转成绿色。 连续心率。开关连续心率追踪。 飞行模式。切断健身追踪设备的所有无线通讯。 “请勿打扰”模式。禁用因手腕运动的显示屏亮起,并阻断来自您手机的智能通知。 心率 传感器模式。使用 A370 作为心率传感器,并配备心率接收设备。 关机。关闭设备。 重置当前蓝牙连接。若要使用任何蓝牙配件,需要与设备再次配对。 信息。查看您设备的 ID,固件

  • 一、简介   “设置"用于PHPCMS系统常用参数配置与管理员帐号维护。 二、功能演示 相关设置 管理员设置

  • 设置 设置包含:采集设置、站点设置、邮件发送设置、代理设置等 采集设置 开启自动采集、设置采集参数、图片本地化 页面渲染设置 代理设置 防止被屏蔽IP 翻译设置 支持百度翻译和有道翻译 站点设置 关闭前台首页、开启图片验证码 邮件发送设置 找回密码时使用

  • 设置 控制台有很多设置,这些设置都可以在控制面板中找到。点击右上角的齿轮按钮就能打开设置面板。 图 10. 设置面板

  • 设置 产品简介 用户可以在小程序设置页里控制授权状态,设置页位置:右上角-更多-关于-更多-设置 开放标准 对所有入驻小程序的企业开放 接口说明 jd.openSetting(OBJECT) 调起宿主客户端小程序设置界面,返回用户设置的操作结果,设置界面只会出现小程序已经向用户请求过的权限。 Object 参数说明: 参数 类型 必填 说明 success Function 否 接口调用成功的回调