我将一个项目从asp.net mvc 2移到了asp.net 4,经过一些修复后,一切似乎都有效。
除了您必须授权的应用部分外。如果没有授权,可以查看非授权页面,但只要您尝试登录,一切都会进行 香蕉。当您登录时,您将登录(您在登录部分中看到您的姓名)但未重定向并提示您再次登录,而您无法访问部分 适用于非授权用户的应用。一切都适用于localhost,但不适用于已部署的站点。
我知道MVC使用websecurity而不是成员资格但我已经读过会员解决方案可以存在于mvc 4项目中,我很乐意使用我的自定义membershipprovider和roleprovider并节省一些时间(如果可能的话)。
控制器:
[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" />