【发布时间】:2013-03-05 23:00:12
【问题描述】:
我能够成功使用(索引视图中的代码)
@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") 不会修改浏览器的内容。
我不明白为什么浏览器中没有加载登录部分视图。 我在控制台中没有任何错误,也没有其他迹象表明有问题。
我搜索了一下,没有找到任何扩展 Hot Towel 模板以支持身份验证的示例。 (除了关于如何设置身份验证令牌的几件事) 我迈出了第一步,只是让索引视图能够在 durandal 应用程序加载之前强制用户登录。这很好用。
什么是让它工作的正确方法? 我有一个使用 Durnadal 入门套件的示例,它显示了这种行为。 我可以提供给任何需要的人。
shell.js 中的 javascript 返回似乎是重定向指示的索引页面的 html。 (试图让警报显示这一切是有问题的)
正在为 Skydrive 等获取样本
【问题讨论】:
-
“成功”回调中的“数据”参数显示什么?
-
从下面的javascript返回的数据元素
-
压缩您的项目,然后在此处发布。它可能无法正常工作有几个可能的原因。而不是在注销后路由到索引..重定向到登录页面。还要检查 Html.Render("Login") 是否有效。
-
我能够弄清楚这一点。正如 Evan 可能怀疑的那样,我通过使用 ajax 调用 loutgout 来破坏重定向。改为将其更改为表单帖子,一切正常。唯一真正的技巧是如何让验证令牌以您的形式呈现。当我有机会时,我会发布整个项目
标签: security durandal hottowel