Facebook Javascript SDK は非同期であるため、実際には Facebook は安全ですが、あなたの Web サイトはそうではありません。
ログイン フローの再構築を始めたばかりで、コードのこの部分がユーザー トークンの管理に役立つかどうか疑問に思っています。
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$fb_error = $e->getResult();
error_log($e);
$user = null;
}
}
//https://developers.facebook.com/docs/reference/api/errors/
switch ($fb_error['error']['error_subcode']) {
case '458':
//Returned on app trying something or user attempting an action after app deauth
//Can do database cleannup operations from this
$fb_error = '458 - User removed the app from user settings';
break;
case '460':
//App is no longer reauthorized and the user is trying something ?
//Stop user from all activities if this comes up as they may deauth then try perform an action
$fb_error = '460 - User needs to reauthorize';
break;
case '463':
//Expired Token
//This is where we autolog the user back in
$fb_error = '463 - Token has expired and a new one needs to be requested';
//need to somehow get the login request code from another page to hide it
//or use htaccess tricks
$facebook->getAccessToken();
break;
case '467':
//Invalid Token
//This is where we autolog the user back in
$fb_error = '467 - Token is invalid and a new one needs to be requested';
break;
}
テストのためにエラーをページに出力できます。
echo 'Error Subcode: '.$fb_error.'<br/>';
echo 'Facebook Error Dump:<br/>';
var_dump($e);
PHP の switch はif
、複数の回答 (ケース) を持つ単一のステートメントのように機能することに注意してください。
コード速度の最適化のために、スイッチを並べ替えて、最も一般的なエラーがスイッチの上部にリストされるようにすることをお勧めします。これは、PHP スイッチが機能する方法として、エラー コードと一致するケースが見つかるまでリストを下に実行することだからです。