facebook Uncaught OAuthException: An active access token must be used to query information about current user
しかし、適切な解決策が得られませんでした。
私は正しく動作しているcodeigniterでfacebook SDKを使用しています。ただし、例外 OAuthException がスローされることがあります。現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります。
ここにコントローラーファイルのコードがあります
$config = array(
'appId' => 'XXXXXXX',
'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXX',
'fileUpload' => true,
);
$this->load->library('facebook/Facebook', $config);
$fbme = null;
$user = $this->facebook->getUser();
if ($user) {
try {
$fbme = $this->facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
//if user is logged in and session is valid.
if ($fbme){
//do some stuff...
//redirecting to user home page (my site's)
}
ビューファイルでは、js sdk を使用しています。ビューファイルのコードは
<div id="fb-root"></div>
<script type="text/javascript">
var button2;
window.fbAsyncInit = function() {
FB.init({ appId: 'XXXXXXXX',
status: true,
cookie: true,
xfbml: true,
oauth: true});
function updateButton(response) {
button1 = document.getElementById('fb-login'); //login button
button2 = document.getElementById('fb-logout'); //logout button
if (response.authResponse) {
//user is already logged in and connected
button2.onclick = function() {
FB.logout(function(response) {});
};
} else {
//user is not connected to your app or logged out
button1.onclick = function() {
FB.login(function(response) {
if (response.authResponse) {
} else {
//user cancelled login or did not grant authorization
}
}, {scope:'email,user_birthday,user_about_me,user_likes,user_interests,user_education_history,user_work_history'});
}
}
}
// run once with current status and whenever the status changes
FB.getLoginStatus(updateButton);
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
FB.Event.subscribe('auth.logout', function(response) {
window.location.reload();
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol
+ '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
問題:
「OAuthException: 現在のユーザーに関する情報を照会するには、アクティブなアクセス トークンを使用する必要があります」がスローされることがあります。エラーログファイルに。
ケース: ユーザーが facebook にログインしていて、既にアプリを認証して いる ユーザーが facebook にログインしていてアプリを認証していて、自分のサイトにログインしようとした場合、ユーザーを自分のサイトにリダイレクトするのではなく (この場合、php sdk は機能していません) 、ビューファイルをロードしています。ビューファイルでも、ユーザーがFacebookにログインしているかどうかを確認しています。(ビューで)ユーザーがログインしている場合、ページがリロードされ、同じコントローラースクリプトが実行され、ユーザーがユーザーのホームページにリダイレクトされます(この場合、php sdkが機能しています)。
しかし、初めてそれは機能しません。どこで間違いを犯しているのかわかりません。
また、そのログアウト ボタン (ビュー ファイル内) も機能しないことがあります。クリックしても、Facebook からユーザーがログアウトされないことを意味します。(同僚のブラウザの 1 つでのみ発生しています。彼女は Windows 7 でクロムを使用しています)