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

ASP.. NET MVC 4 web安全.CurrentUserId返回-1

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);