1

我一直在努力让 OAuth 在我的 MVC4 移动应用程序上工作。

我基本上

  1. 创建了一个 MVC4 移动应用程序
  2. 创建了一个 MVC4 Web 应用程序
  3. 将 AccountController、AccountModel、InitializeSimpleMembershipAttribute 和所有帐户视图复制到我的 MVC4 移动应用程序中
  4. 启用 Google 和 Facebook OAuth 提供程序
  5. 我还确保 RoleManager 是根据simplemembershipprovider-not-working初始化的,尽管我认为这并不重要。(我需要它来测试一些基于角色的安全性)
  6. 通过设置 data-ajax="false" 禁用 ajax(我认为):( using (Html.BeginForm("ExternalLogin", "Account",new RouteValueDictionary { { "ReturnUrl", ViewBag.ReturnUrl } }, FormMethod.Post, new Dictionary<string, object> { { "data-ajax", false } }))这似乎对页面没有任何影响 - 所以我可能在这里做错了什么......)

我可以进入 LogIn 视图 /Account/Login,当我单击 google 按钮时,调试器会进入public ActionResult ExternalLogin(string provider, string returnUrl)

但是 -public ActionResult ExternalLoginCallback(string returnUrl)永远不会被击中。在视觉上,我得到了 jquery 移动“页面加载”动画 - 然后我得到“错误加载页面”

我有两个问题:

  1. 当我试图弄清楚发生了什么时,如何获得更多信息?
  2. 如何让 OAuth 在我的 MVC4 移动网站上运行?

顺便说一句:两个站点都针对 .Net4.0

4

2 回答 2

2

好的——所以我找到了答案——cuplrit 确实是 jQuery mobile 中的 ajax。

我修改了我的 _layout.cshtml 以便它可以在加载 jQuery 之后,但在加载 jQuery 移动之前呈现自定义脚本:

    @Scripts.Render("~/bundles/jquery","~/scripts/RemoveHashFromWindowLocation")
    @RenderSection("beforeJqueryMobile", required: false);
    @Scripts.Render( "~/bundles/jquerymobile")
    @RenderSection("scripts", required: false)

然后我修改了我的 Login.cshtml,使其包含以下部分:

@section BeforeJqueryMobile {
    @Scripts.Render("~/scripts/disable-ajax.js")
}

最后,我将以下内容添加到我的脚本文件夹中:

禁用 ajax.js:

$(document).bind("mobileinit", function () {
    $.mobile.ajaxEnabled = false;
});

RemoveHashFromWindowLocation.js:(感谢Facebook Oauth Login With Jquery Mobile #_=_

if (window.location.hash == "#_=_")
    window.location.hash = "";

Voila - 使用 jQuery 移动的 OAuth。:-)

于 2012-09-25T07:48:34.643 回答
0

如果您的网站直接加载到登录页面,espenalb 的上述答案确实有效,但是如果您先说主页,然后有一个指向登录页面的链接(使用相同的布局),您将在加载页面时收到错误消息您单击其中一个社交登录按钮。

要修复此添加

<script>

    $('#login-link').live("click", function () {
        $.mobile.ajaxEnabled = false;
    });

</script>

在您的移动布局页面的底部,这将附加一个事件处理程序,该处理程序将禁用 ajax 到登录链接。

于 2013-04-30T19:21:43.893 回答