1

OAuthをMVC4モバイルアプリケーションで動作させるのに苦労しています。

私は基本的に

  1. MVC4モバイルアプリケーションを作成しました
  2. MVC4Webアプリケーションを作成しました
  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 } }))これはページに影響を与えていないようです-したがって、ここで何か間違ったことをしている可能性があります...)

ログインビュー/アカウント/ログインにアクセスできます。Googleボタンをクリックすると、デバッガーがに侵入します。public ActionResult ExternalLogin(string provider, string returnUrl)

ただし、public ActionResult ExternalLoginCallback(string returnUrl)ヒットすることはありません。視覚的には、jquerymobileの「ページの読み込み」アニメーションが表示されます。次に「ページの読み込みエラー」が表示されます。

2つの質問があります:

  1. 何が起こっているのかを理解しようとすると、どうすればより多くの情報を得ることができますか?
  2. MVC4モバイルサイトでOAuthを機能させるにはどうすればよいですか?

ところで:両方のサイトは.Net4.0をターゲットにしています

4

2 に答える 2

2

OK-それで私は答えを理解しました-cuplritは確かにjQuerymobileのajaxでした。

_layout.cshtmlを変更して、jQueryを読み込んだ後、jQuerymobileを読み込む前にカスタムスクリプトをレンダリングできるようにしました。

    @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")
}

そして最後に、scriptsフォルダーに以下を追加しました。

disable-ajax.js:

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

RemoveHashFromWindowLocation.js:(JqueryMobileを使用したFacebookOauthログインのおかげで#_ = _

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

Voila-jQuerymobileで動作するOAuth。:-)

于 2012-09-25T07:48:34.643 に答える
0

espenalbからの上記の回答は、サイトがログインページに直接読み込まれる場合は機能しますが、ホームページを言ってからログインページ(同じレイアウトを使用)へのリンクがある場合は、次の場合にページの読み込みエラーが発生します。ソーシャルログインボタンの1つをクリックします。

これを修正するには、

<script>

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

</script>

モバイルレイアウトページの下部に、ログインリンクへのajaxを無効にするイベントハンドラーを添付します。

于 2013-04-30T19:21:43.893 に答える