0

プロジェクトを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 つの問題があります。

  1. すべてのコントローラーに [authorize] 属性を設定する必要があります
  2. 私の Web フォームはフォーム認証内にありません (ログインせずに直接アクセスできます!!)

私は何を間違っていますか?

4

1 に答える 1

2

web.config で承認を定義している場合、AllowAnonymousAttribute は必要ありません。

そうは言っても、AjaxLogin を承認リストに追加しているようには見えません。そうしないと Ajax リクエストがブロックされるため、これが必要です。~/Login パスと ~/Account/AjaxLogin パスの両方が必要です。~/Account/Login パスも必要かもしれませんが、それについては確信が持てません。

于 2012-05-22T14:32:57.643 に答える