2

ASP.NET MVC 3 Webサイトのユーザー管理の標準デモには、次のログインプロセスが含まれています。

  1. ユーザーが認証データを入力します。
  2. データはサーバーに投稿されます。
  3. 認証の試行を処理するコードは、提供されたデータをDBでチェックします。
  4. すべてがOKの場合-FormsAuthentication.SetAuthCookieブラウザからのアップカミングセッションリクエストのCookieを設定するための呼び出し。
  5. そして、ユーザーをどこにでもリダイレクトします。

純粋にjQuery.Ajax-ASP.NETログオンメカニズムを実装したいと思います。

jsからMVCサイトアクションを問題なく呼び出すことができます。FormsAuthentication.SetAuthCookieしかし、JSコードからこのCookieデータを手動で取得してブラウザのCookieストアに配置するにはどうすればよいですか?サーバーまたはjQuery.ajax成功コードでそれらを抽出するにはどうすればよいですか?

4

3 に答える 3

3

MVC 3を使用すると、ログインボタンにonclickイベントを設定してから、POSTをログオンアクションに送信してajaxすることができます。LogonアクションがJSONの結果を返し、ユーザーがjavascript関数から送信される場所を制御するようにします。

[HttpPost]
public JsonResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        //Do your authentication
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
        return Json(true);
    }

// If we got this far, something failed, redisplay form
    return Json(false);
}

ビューでフォームにIDを追加し、ボタンにクリックハンドラーを配置します。

<% using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { Id = "frmLogOn" }))
   { %>
    <%: Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")%>
    <div>
        <fieldset>
            <legend>Account Information</legend>

            <div class="editor-label">
                <%: Html.LabelFor(m => m.UserName)%>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(m => m.UserName)%>
                <%: Html.ValidationMessageFor(m => m.UserName)%>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(m => m.Password)%>
            </div>
            <div class="editor-field">
                <%: Html.PasswordFor(m => m.Password)%>
                <%: Html.ValidationMessageFor(m => m.Password)%>
            </div>

            <div class="editor-label">
                <%: Html.CheckBoxFor(m => m.RememberMe)%>
                <%: Html.LabelFor(m => m.RememberMe)%>
            </div>

            <p>
                <input type="submit" value="Log On" onclick="clicked(); return false;" />
            </p>
        </fieldset>
    </div>
<% } %>
<script type="text/javascript">
    function clicked() {
        var form = $('#frmLogOn');
        $.ajax({
            type: 'POST',
            url: '/Account/LogOn',
            data: form.serializeObject(),
            success: function (result) {
                if (result == true) {
                    alert("success");
                    window.top.location = "/Home/Index";
                }
                else {
                    alert("failure");
                }
            },
            error: function (data) {
                alert("error");
            }
        });
    }
</script>
于 2012-05-10T22:27:50.283 に答える
0

MVC4ベータ版をインストールします。デフォルトのインターネットテンプレートは、MVC3アプリに盗んで入れることができるAjax認証メカニズムを提供します。

または、MVC4を使用してください。MVC4は今後数か月以内にリリースされる可能性が高いためです。現在のMVC4ベータ版の稼働ライセンスもあるので、必要に応じて稼働させることもできます。

于 2012-05-10T21:43:53.270 に答える
0

jQueryではない-MicrosoftAjax のフォーム認証の使用

于 2012-05-10T23:03:17.027 に答える