3

正常に使用できました(インデックスビューからのコード)

  @if (@User.Identity.IsAuthenticated)
    {
    <div id="applicationHost">
        @Html.Partial("_splash")
    </div>

   @Scripts.Render("~/scripts/vendor");
        if(HttpContext.Current.IsDebuggingEnabled) {
            @Html.AntiForgeryToken()
            <script>
               window.userId = "@User.Identity.Name";
                console.log(window.userId);
            </script>
            <script type="text/javascript" src="~/App/durandal/amd/require.js" data-main="@Url.Content("~/App/main")"></script>

        } else {
            <!-- Remember to run the Durandal optimizer.exe to create the main-built.js  -->
            <script type="text/javascript" src="~/App/main-built.js"></script>
        }
    }
    else
    {
        <script src="~/Scripts/jquery-1.9.1.min.js"></script>

            <div id="login">
              @Html.Partial("Login")
            </div>

    }

ログイン後、アプリを最初に強制的にログインページに移動させる(標準のmvcアカウントコントローラーと標準のmvc4アプリのログインフォームを使用)。

次に、ログアウトコントローラーメソッドを呼び出すためのボタンをフッターに追加しました(この関数はshell.jsに追加され、ボタンが押されたときに呼び出されることを確認しました)

 function logoff() {
            var token = $("input[name='__RequestVerificationToken']").val();

            $.ajax({
                url: "/Account/LogOff",
                cache: false,
                type: "POST",
                async: false,
                data: { "__RequestVerificationToken": token },
                success: function (data) {
                    log("from success in logoff", data, false); //this shows up in the log


                    return true;
                },
                error: function (data) {
                    return false;
                }

            });
        }

コントローラメソッドを介してデバッグしましたが、正常に呼び出されます

  [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult LogOff()
        {
            try{
            WebSecurity.Logout();  //this call does not generate an error
            }   
            catch(Exception excp)
            {
                string msg = excp.Message;
            }
            return RedirectToAction("index", "HotTowel");
        }

インデックスページが呼び出され、ユーザーは認証されなくなりますが、上記のPartialView( "Login")を呼び出しても、ブラウザのコンテンツは変更されません。

ログイン部分ビューがブラウザにロードされない理由がわかりません。コンソールにエラーはなく、何かが間違っていることを示す他の兆候はありません。

私はグーグルで検索しましたが、認証をサポートするためにホットタオルテンプレートを拡張している人の例は見つかりませんでした。(認証トークンの設定方法に関するSOに関するいくつかのことを除いて)最初のステップは、durandalアプリが読み込まれる前にユーザーにログインを強制する機能をインデックスビューに与えることでした。これはうまく機能しています。

これを機能させるための適切な方法は何ですか?この動作を示すDurnadalスターターキットを使用したサンプルがあります。私はそれを必要とする人に提供することができます。

shell.jsのjavascriptは、リダイレクトが示すインデックスページのように見えるhtmlを返します。(アラートを取得してすべてを表示しようとする作業には問題があります)

スカイドライブなどへのサンプルの取得に取り組んでいます

4

1 に答える 1

0

私もこの問題を抱えていました:

        <div id="login">
          @Html.Partial("Login")
        </div>

に置き換える必要があります

        <div id="login">
          @Html.Partial("../Account/Login")
        </div>

これは、レンダリングしたいログインへの直接パスを見つけることができるようにするためです。これで問題が解決するはずです。「ログイン」ページで少なくとも 404 エラーが発生しなかったのは奇妙です。エラー処理が行われ、表示されなかったと思われます。

于 2013-06-18T10:28:17.753 に答える