我将一个项目从 asp.net mvc 2 移动到了 asp.net 4,经过一番修复后,一切似乎都正常了。
除了您必须授权的应用程序部分。未经授权可以查看未经授权的页面,但是一旦您尝试登录,一切都会变得很糟糕。当您登录时,您会登录(您会在登录部分中看到您的姓名),但不会重定向并提示您再次登录,并且您无法访问适用于非授权用户的应用程序部分。一切都在本地主机上工作,但在部署的站点上却不行。
- 起初我认为我的机器密钥和应用程序池回收存在问题,所以我添加了一个。还是一样的问题。
我知道 MVC 使用网络安全而不是成员资格,但我读过 MVC 4 项目中可以存在成员资格解决方案,如果可能的话,我很乐意使用我的自定义成员资格提供程序和角色提供程序并节省一些时间。
控制器:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, true);
FormsAuthentication.SetAuthCookie(model.UserName, true);
var role = userRepo.usersInRoles.First(x => x.userMail == model.UserName);
if (role.roleName == "Business")
return RedirectToAction("Start", "Business");
if (role.roleName == "Admin")
return RedirectToAction("Index", "Admin");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
return View(model);
}
成员资格和角色的配置设置
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<membership defaultProvider="AccountMembershipProvider">
<providers>
<clear />
<add name="AccountMembershipProvider" type="MyApp.UI.Infrastructure.AccountMembershipProvider" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="RoleMembershipProvider">
<providers>
<clear />
<add name="RoleMembershipProvider" type="MyApp.UI.Infrastructure.RoleMembershipProvider" />