1

phonegapで作成された私のAndroidアプリでは、ユーザーはサインインできます。サインインすると、JQueryはログインとパスワードを取得し、HTTP基本認証仕様に従って資格情報を使用してajax呼び出しを実行します。すべてが正常に動作します。
ただし、ユーザーが不正なクレデンシャルを設定した場合の処理​​で問題が発生します。.error()コールバックで、ステータス401の特定のメッセージ(「認証に失敗しました」など)と他のステータスの別のメッセージ(「技術的な問題」)を表示したいと思います。私のコード:

$.ajax({
                url: "http://exemple.com",
                type: "GET",
                dataType: "text",
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                beforeSend: function (xhr)
                {
                    xhr.setRequestHeader("Authorization", "Basic "+$.base64.encode(email+":"+password));
                },
                success: function() {
                    //my success callback
                },
                error: function(xhr) {
                    if(xhr.status===401) {
                        //"authentication failed"
                    }
                    else {
                        //"technical problem"
                    }
                }
            });

このコードはブラウザで正常に機能します。ステータス401が送信されます。しかし、phonegap androidアプリでテストすると、ステータス送信は0です。クレデンシャルが良好な場合、ステータス送信は200であり、アプリの他のリクエストは正常に機能するため、corsの問題ではないと思います。

何か案が ?ご協力いただきありがとうございます

4

2 に答える 2

5

調査を重ねるうちに、問題はphonegapに起因することがわかりました。WWW-Authenticate : Basic realm="Secured Area"サーバーは、ステータス401とヘッダーでajaxリクエストに応答します。WebViewは応答をインターセプトし、ヘッダーがあるため、資格情報を待ちます。ただし、この動作は電話では表示されないため、リクエストはタイムアウトに達し、ステータスコード0がトリガーされます。
良い解決策の1つは、サーバーの応答を変更して、WWW-Authenticateヘッダーを含めないようにすることです。私の解決策は、おそらく悪いですが迅速ですが、0ステータスを401ステータスと見なすことです。

error: function(xhr) {
                        if(xhr.status===401 || xhr.status===0) {
                            //'authentication failed'
                        }
                        else {
                            //'technical error'
                        }
                    }, 

それが誰かを助けることができることを願っています。

于 2013-03-27T22:04:33.980 に答える
0

面白い。最近同じ問題が発生しましたが、beforeSendを使用する代わりに、ユーザー名とパスワードの属性を.ajaxに渡していました。

「$.base64.encode」を「btoa」に変更してみてくださいhttps://developer.mozilla.org/en-US/docs/DOM/window.btoa

于 2013-03-27T17:02:51.597 に答える