Я использую вход в Facebook на одном из моих веб-сайтов, используя sdk для PHP.
Иногда работает facebook login, а иногда нет.
Вот мой index.php:
/// fb login area..... include("facebook/src/facebook.php"); $facebook = new Facebook(array( 'appId' => '159326560901256', 'secret' => 'c6b30bd2f80747b64d5b1d15a3da9e9c', )); $user = $facebook->getUser(); $loginUrl = $facebook->getLoginUrl(array( 'scope' => 'email', 'redirect_uri' => 'http://xyz.com/login_fb.php' )); <a href="<?=$loginUrl?>"><img class="fb_img" src="images/fb_logo.png" width="153" height="38" /></a>
он переходит в login_fb.php
:
https://www.facebook.com/dialog/oauth?client_id=123131231&redirect_uri=http%3A%2F%2Fxyz.com%2Flogin_fb.php&state=403bc8aaf9eaee4064e3cc27befc71ff&scope=email
теперь на login_fb.php я получаю этот URL:
login_fb.php?code=ASA&S^&*A^S&*A^S&*^A&*ASUAUIYSUIYASIYAUSYUIASA
и в $user
я получаю 0
/// code for login_fb.php include("facebook/src/facebook.php"); $facebook = new Facebook(array( 'appId' => '159326560901256', 'secret' => 'c6b30bd2f80747b64d5b1d15a3da9e9c', )); // Get User ID $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } $logoutUrl = $facebook->getLogoutUrl(array( 'next' => 'http://minuteville.com/index.php?val=fblogout' ));
в/// code for login_fb.php include("facebook/src/facebook.php"); $facebook = new Facebook(array( 'appId' => '159326560901256', 'secret' => 'c6b30bd2f80747b64d5b1d15a3da9e9c', )); // Get User ID $user = $facebook->getUser(); if ($user) { try { $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } $logoutUrl = $facebook->getLogoutUrl(array( 'next' => 'http://minuteville.com/index.php?val=fblogout' ));
Почему он не работает?
Добавив следующую строку и используя getAccessTokenFromCode
в Facebook SDK, проблема может быть решена.
Код acesss истекает. Таким образом, получение нового кода доступа путем обмена кодом устраняет проблему
$access_code = $facebook->getAccessTokenFromCode($_GET['code']);
https://developers.facebook.com/docs/howtos/login/server-side-login/#step6
Вы должны иметь возможность создать токен доступа с параметром кода, чтобы получить пользователя. Все написано в документе.