私のウェブサイトでは、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秒間不必要に表示する必要がありません。
私はそれを十分に説明したと思いますが、そうでない場合は明確に尋ねてください。この問題を解決してもらいたいです!=)