我在控制器中有以下代码用于登录验证:
SecurityProvider securityProvider = new SecurityProvider();
if (securityProvider.ValidateUser(UserName, Password))
{
FormsAuthentication.SetAuthCookie(UserName.ToString(), false);
if (Roles.IsUserInRole("admin"))
{
return RedirectToAction("Dashboard", "Admin");
}
else
{
return RedirectToAction("Dashboard", "User");
}
}
我有自定义成员资格提供程序和角色提供程序类。因此,在Roles.IsUserInRole("admin")
public override string[] GetRolesForUser(string username)
{
List<string> currentUserRoles = new List<string>();
using (myDBEntities db = new myDBEntities())
{
currentUserRoles.Add(db.Users.First(m => m.UserName == username).Role);
}
return currentUserRoles.ToArray();
}
但无论我尝试使用哪个用户名,此方法的用户名都是“admin”。在项目中没有明确将用户名设置为“admin”的痕迹。我错过了什么吗?
User.Identity.Name
始终返回“admin”
答案 0 :(得分:0)
你应该在Roles
中调用重载方法:
Roles.IsUserInRole(userName, roleName);
看到差异,我们在这里传递userName。这将最终传递给您的GetRolesForUser
方法。我认为它会解决你的问题。