1

私のウェブサイトでは、Facebookログインを使用しています。この$facebook->getUser()機能を使用すると、ユーザーをログインページ(ホームページ)からログイン時に表示される最初のページにリダイレクトできます。

からの結果$facebook->getUser()は0またはユーザーIDです。この値はドメインCookieに保存されているように見えます(セッションCookieではないため、ブラウザを完全に閉じて再度開いても削除されません)。私のページはユーザーのIDを知るためにFacebookに接続する必要がないため、これは完全に使用されます。

ただし、ユーザーはすべてのCookieを削除できるため$facebook->getUser()、ユーザーがアプリを既に受け入れている場合でも、関数に0を返すことができます(https://www.facebook.com/settings?tab=applicationsにあります) 。

私も次のものを使おうとしました:

$accessToken = $this->facebook->getAccessToken();
$facebook->api('/me?access_token=' . $accessToken, 'GET');

しかし、これは私にエラーを与え続けますAn active access token must be used to query information about the current user。は$this->facebook->getAccessToken()、ユーザーが指定したアプリからAccessTokenを返すため、これは8人の助けにはなりません:(

私のページは、ユーザーがすでにFacebookに接続していることを認識していないため、ログインページを開きます。こちら//connect.facebook.net/en_US/all.jsが読み込まれ、FB.getUserID()リクエストできます。

今問題と奇妙な部分:

window.fbAsyncInit関数が終了し、SDKが非同期でロードされたとき

 (function(d){
 var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
 js = d.createElement('script'); js.id = id; js.async = true;
 js.src = '//connect.facebook.net/en_US/all.js';
 d.getElementsByTagName('head')[0].appendChild(js); }(document));

を実行しFB.getUserID()ます。これはNothingを返します。しかし、約100〜700ミリ秒後に、fb-idが返されます(再度要求した場合)。したがって、Javascriptは、ドメインCookieを使用せずに、Facebookからfb-idを取得しました。

Chromeのインスペクターを使用してネットワークを開くと、すべてが読み込まれて終了するはずだった後、ページxd_arbiter.php?version=19 (static.ak.facebook.com/connect)が要求されて読み込まれていることがわかります。同じことがカウントされますoauth?client_id=***&response_type=*** (www.facebook.com/dialog)

このjavascriptリクエストはFacebookからfb-idを取得できるようです。

PHPでこれを実行できるようにしたいので、ユーザーはログインページを約1〜2秒間不必要に表示する必要がありません。

私はそれを十分に説明したと思いますが、そうでない場合は明確に尋ねてください。この問題を解決してもらいたいです!=)

4

0 に答える 0