正常に使用できました(インデックスビューからのコード)
@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を返します。(アラートを取得してすべてを表示しようとする作業には問題があります)
スカイドライブなどへのサンプルの取得に取り組んでいます