2

PhoneGap でモバイル アプリを構築しています。いくつかの静的な HTML ページ (携帯電話にローカルに保存) を作成し、AJAX を使用してサーバーからデータを読み込もうとしました。

$( document ).bind( "mobileinit", function() {
        $.support.cors = true;
        $.mobile.allowCrossDomainPages = true; 
    });

$(document).ready(function () {
    ajaxDeferred = $.ajax({
        url: 'http://example.com/api/isAuthorized'
        type: method,
        data: parameters,
        timeout: 40000
    });

    ajaxDeferred
        .done(function(data) {  

              alert(data.result);     

         })
        .fail(onFailHandler);
}); 

サーバー側には、このコードがあります

public ActionResult IsAuthorized()
{
        FormsAuthentication.SetAuthCookie("shade", true);

        return this.Json(
            new
                {
                    result = this.HttpContext.User.Identity.IsAuthenticated
                },
                JsonRequestBehavior.AllowGet
            );
 }

私が期待する:

  • ユーザーが許可されていないため、最初の実行で「False」の結果を受け取ります
  • SetAuthCookie により、2 回目の実行で「True」を受け取ります。

ブラウザで試してみると、期待どおりに動作します。しかし、私がモバイルアプリを実行しているものは何でも、クッキーが転送されていないように、常に False を受け取ります。

問題は、ユーザーを AJAX で正しくログインする方法です。それは可能ですか? ベストプラクティスとは? 理由は不明ですが、この単純なシナリオは PhoneGap のマニュアルではカバーされていません。

4

1 に答える 1

1

わかりました、私は答えを見つけました:

$(document).ready(function () {

   ...

});

適切ではない。代わりに使用する必要があります

document.addEventListener(
  "deviceready",
  function() {

     ... at this point cookies are working fine!

  },
  false);

Access-Control-Allow-Origin および Access-Control-Allow-Credentials ヘッダーは、他のクロスドメイン手法と同様に必要ありません

于 2013-04-03T16:00:31.443 に答える