プロジェクトをasp.net mvc 2からasp.net 4に移動しましたが、少し修正した後、すべてが機能しているように見えました。
承認が必要なアプリの部分を除きます。認証なしで非認証ページを表示することは可能ですが、ログインしようとするとすぐにすべてがうまくいきません。ログインすると、ログインされますが (ログイン部分に自分の名前が表示されます)、リダイレクトされず、再度ログインするように求められ、承認されていないユーザー用のアプリの部分に到達できません。すべてがローカルホストで機能しますが、デプロイされたサイトでは機能しません。
- 最初は、マシンキーとアプリプールのリサイクルに問題があると思ったので、1 つ追加しました。それでも同じ問題。
MVC がメンバーシップの代わりに websecurity を使用していることは知っていますが、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" />