2

物語:

ここでこのパズルを教えてくれる社会統合の専門家を探しています。私のWebサーバーは、春のセキュリティを使用してユーザーのサインイン、サインアップを認証しています。最近、Web サーバーに春のソーシャルを実装しましたが、すべてが非常にスムーズに進みました。例として fb を取り上げます。ユーザーが Facebook からログインすると、Spring Social は URL を構築し、ユーザーを Facebook にリダイレクトします。ユーザーが Facebook で認証されると、ユーザーは自分のサイトにリダイレクトされます。

パズル:

同じ「ログイン」機能を持つモバイル アプリ (html5 + phonegap) を実装する必要があります。Facebookの統合ページにアクセスしました。html5 アプリの認証を行う方法はいくつかあります。サーバー側の実装を選択しました: http://developers.facebook.com/docs/authentication/server-side/クライアント側のログインよりも.

私が最初に遭遇する問題は、モバイル アプリでのリダイレクトです。アプリ ウィンドウではなく、プロバイダーのログイン ページにリダイレクトするポップアップ ウィンドウが必要です。ajax 呼び出しでリダイレクト URL を取得し、childbrowser phonegap プラグインで新しいウィンドウを開くことができました。問題は、ユーザーがプロバイダーを介して認証された場合、別のブラウザーにあるため、サーバーが「ユーザー認証済み」をクライアントに通知する簡単な方法がないことです。

サンプルコード

onFBlogin: function(){
Ext.Ajax.request({
    url: APP.domain + "api/mobile/signin/facebook.json",
    method: 'POST',
    success: function(result, request) {
    var json = JSON.parse(result.responseText);
         window.plugins.childBrowser.onLocationChange = function (url) {
            if(url==APP.domain+"api/mobile/success"){
            window.plugins.childBrowser.close();
            }
    };
    window.plugins.childBrowser.showWebPage(json.outhurl,{ showLocationBar: true });
    },
    failure: function(result, request) {
          console.log("request facebook signin redirect url" + result);
    },
});
}

通常、春のセキュリティでは、ユーザーが残りのAPIを介して認証された場合、クライアントはリクエストを投稿し、コールバックの成功を通じて認証されたトークンを取得できます。これらのトークンは、残りの API 呼び出しごとに再利用できます。上記のコードによると。認証が完了したかどうか、いつサーバーからクライアントにトークンを送信する必要があるかを知ることができません。

何かアイデアをいただければ幸いです。ありがとう!

4

1 に答える 1

-1

私は同じ問題に直面しています。私はこれを実装しようとしています:

Facebookでアプリを構成して、return addresがhttp:// what ever dot com / receiveFacebookResponseのようになるようにします。これは、基本的に、開いたばかりのポップアップで実行されるjavascriptコードに応答します。このjsコードは、ポップアップを閉じて、親ウィンドウ(アプリのウィンドウ)で関数を実行します。この関数はアプリに存在する必要があります。それを(すべてのパラメーターとともに)セッション(またはCookie)に配置します。この関数は、ajax呼び出しを実行してアプリのヘッダーを変更し、基本的に「loginhere」メッセージを「Hellologged-user」(およびその他の必要なもの)に変更し、おそらく、開始されたが、ログインプロセスが中断されたアクション。

やってみて、教えてあげます。あなたが他の方法でそれをしたかどうか聞いてうれしいです。

于 2013-01-28T18:48:03.033 に答える