0

我有这个代码:

 public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            //I added this just to check if it returns true.
            bool check = Membership.ValidateUser(model.UserName, model.Password);
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                //trying to get get the name here.
                string name = Membership.GetUser().UserName;
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                {
                    return Redirect(returnUrl);
                }
                else
                {                        
                        string[] roles = Roles.GetRolesForUser(User.Identity.Name);
                        switch (roles[0])
                        {
                            case "Employee":
                                return RedirectToAction("Index", "Employee");
                            case "HR_Team":
                                return Redirect("");
                            case "Team_Lead":
                                return Redirect("");
                            case "Management":
                                return Redirect("");
                        }
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

代码工作得很好,但我不知道为什么它停止正确响应。现在我无法获得用户名及其角色(这可能是因为它没有获得我猜的用户名)。我完全不知道它是怎么发生的。有人请帮助摆脱这个问题。我很感激任何帮助。提前非常感谢。

4

1 回答 1

1

确保在获取用户时指定了用户名,因为您尚未设置表单身份验证 cookie(只有在重定向之后,您才能使用此不带任何参数的重载)。

Membership.GetUser().UserName;另外,当您已经拥有用户名时,调用的意义model.UserName何在?

同样的事情代表角色:

string[] roles = Roles.GetRolesForUser(model.UserName);

不要尝试User.Identity.Name在您的 LogOn 方法中使用,因为您还没有经过身份验证的用户。

如果你想让用户使用:

var user = Membership.GetUser(model.UserName);

代替:

var user = Membership.GetUser();
于 2013-08-26T15:36:38.850 回答