プロジェクトをasp.net WebフォームからMVC4に段階的にアップグレードしています。最初のステップでは、ログイン ページと他のいくつかのページを変更しました。私は独自のロジック (メンバーシップなし) でフォーム認証を使用しています - データベース テーブルに対してユーザー名/パスワードをチェックします。OK の場合、ユーザーは宛先にリダイレクトされます。私のログインコードは次のとおりです。
Web.config:
<authentication mode="Forms">
<forms loginUrl="~/LogIn" name=".ASPXFORMSAUTH" timeout="150" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
ログイン コントローラ:
[AllowAnonymous]
[HttpPost]
public ActionResult AjaxLogin(FormCollection postedFormData)
{
try
{
string userName = postedFormData["Login_UserName"];
string password = postedFormData["Login_Password"];
UserEntity userEntity = new UserEntity(Utilities.AuthenticateUser(userName, password, 1));
Session["UserEntity"] = userEntity;
FormsAuthentication.SetAuthCookie(userEntity.Key.Id.ToString(), false);
return Json(new { redirectToUrl = "./AccountSelection", error = "false", lan = Thread.CurrentThread.CurrentUICulture.ToString() });
}
catch (Exception ex)
{
return Json(new { redirectToUrl = "", error = ExceptionHandler.HandleException(ex), lan = Thread.CurrentThread.CurrentUICulture.ToString() });
}
}
ログインしようとすると、http 302 が表示され、ログインにリダイレクトされます。web.config の「承認」セクションを削除すると問題なく動作しますが、次の 2 つの問題があります。
- すべてのコントローラーに [authorize] 属性を設定する必要があります
- 私の Web フォームはフォーム認証内にありません (ログインせずに直接アクセスできます!!)
私は何を間違っていますか?