1

我正在尝试将用户重定向到登录时的相应页面。所以我检查他们是否在某个角色中,然后根据成员身份进行重定向。但是, Roles.IsUserInRole() 似乎不起作用。另外,当我使用 Roles.GetRolesForUser("username") 我得到“System.String[]”。我在 mvc4 中使用默认的 simplemembership。我可以看到在数据库中创建的用户并链接到适当的角色。此外,当我使用 [Authorize Roles..] 时效果很好。这是我的登录名(几乎是添加了我的角色检查和重定向的默认登录名。

public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {   //Get list of roles to print
                Session["FName"] = Roles.GetRolesForUser(model.UserName);
                if(Roles.IsUserInRole(model.UserName,"User")){
                    return RedirectToAction("Index","UserLanding");
                    Session["FName"] = "User in User group";
                }
                return RedirectToLocal(returnUrl);
            }

            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return View(model);
        }

我希望当用户登录“用户”组时,他们会被重定向到 UserLanding Congroller 索引页面。但是,它们总是被重定向到主页。

4

2 回答 2

2

您可以手动验证用户,以便您可以访问识别特定用户的会员类别,然后您可以访问所有与用户相关的数据,如角色等。

这是您在访问角色之前必须添加以手动验证用户的代码,

 Membership.ValidateUser("Username", "PASSWORD");
 FormsAuthentication.SetAuthCookie(usermaster.Useremail, true);

希望这对你有帮助。拉吉

于 2012-10-17T11:41:08.967 回答
2

我猜你不能访问 Roles.IsUserInRole 或 GetRolesForUser 直到重定向之后,因此是空值。我在基于角色的授权下找到了这个。如果有人有办法直接在数据库中访问角色而无需通过角色,我可以使用它。但与此同时,我将按照文章中的建议实现额外的重定向。

于 2012-10-03T20:33:40.967 回答