Я новичок в разработке с помощью API Facebook, поэтому заранее благодарю вас за терпение, которое помогло мне решить мою проблему.
Я использую Facebook PHP SDK 3, который проверяет токен состояния и код токена пользователя для проверки подлинности, но, похоже, он работает только тогда, когда я запускаю приложение через Facebook.
Пошагово более подробно:
(1) Удалить разрешения для приложения > Чтобы начать все сначала и попытаться устранить неполадки, я вхожу в Facebook и удаляю своего пользователядоступ к приложению, чтобы мне снова предложили принять разрешения.
(2) Обновить веб-приложение > Затем я обновляю свое приложение, и оно не знает, что у меня естьСессия в фейсбуке!
Разве приложение не должно хотя бы видеть мой идентификатор пользователя Facebook, когда я захожу в Facebook?
Удаляло ли приложение измой пользователь вызвал потерю доступа к приложению?
(3) Выход из Facebook, обновление приложения > Поскольку это не работает, я выхожу из Facebook и обновляю свою сетьприложение, чтобы начать все сначала.
Создание ссылки для входа в систему или выхода из Facebook на основе информации о пользователях
<code>public function run(){
$FB = &$this->getFacebook();
$user = $FB->getUser();
$user_dat = $FB->api('/me');
$logoutUrl = $FB->getLoginUrl(array('scope'=> $fbPermissions,'redirect_uri'=> $appBaseURL));
$loginUrl = $FB->getLogoutUrl();
?>
<h1>php-sdk</h1>
<?php if ($user): ?>
<a href="<?php echo $logoutUrl; ?>">Logout</a>
<?php else: ?>
<div>
Login using OAuth 2.0 handled by the PHP SDK:
<a href="<?php echo $loginUrl; ?>">Login with Facebook</a>
</div>
<?php endif ?>
<?php if ($user): ?>
<h3>You</h3>
<img src="https://graph.facebook.com/<?php echo $user; ?>/picture">
<h3>Your User Object (/me)</h3>
<pre><?php print_r($user_dat); ?>
Вы не подключены. (4) Нажмите «Сгенерированная ссылка для входа» > Ссылка для входа в FB создается в моем веб-приложении (за пределами Facebook). Я нажимаю на нее и перенаправляю меня на Facebook для входа.
Генерируемый URL для входа в систему
https://www.facebook.com/login.php?
api_key=112233445566778
&skip_api_login=1
&display=page&
cancel_url=http://www.mywebapp.com/app/beta/?error_reason=user_denied&error=access_denied
&error_description=The+user+denied+your+request.
&state=99ff88cc33dd77aa11bb00cc2266dd11
&fbconnect=1
&next=https://www.facebook.com/connect/uiserver.php?method=permissions.request
&app_id=112233445566778
&display=page
&redirect_uri=http://www.mywebapp.com/app/beta/?response_type=code&state=99ff88cc33dd77aa11bb00cc2266dd11
&fbconnect=1
&perms=user_about_me,user_activities,user_likes,email,user_online_presence,read_friendlists,manage_notifications,publish_stream
&from_login=1
&rcount=1
(5) Войдите в Facebook, разрешите доступ к приложениям > Я вхожу, а затем запрашивает разрешениеразрешения для моего приложения, которые я делаю, нажимая «Разрешить», и Facebook перенаправляет меня обратно в мое приложение с этим URL.
http://www.mywebapp.com/app/beta/?
code=ABCxxx
&state=b3f5efffc496b3f5efff38e32604e3
Однако, когда я возвращаюсь в приложение, мои журналы ошибок сервера выдают ошибкусообщение:
[error] ***CSRF state token does not match one provided.***
И приложение думает, что я все еще не вошел в систему, и не отображает никакой пользовательской информации!
Похоже, что токен состояния приложения не соответствуетодин из них был возвращен из Facebook после того, как пользователь принял разрешения для приложений через Ouath.
В этом случае маркер состояния, который я отправил как часть ссылки для входа, был:
state=9655d77aa198fc0a29774694134dd0c7
, но затем перенаправление в Facebookвернул меня к своему приложению с этим токеном состояния!
state=b3f5efffa4169f3c4b816838e32604f5
Отправленный мною токен действительно похож на токен предыдущего сеанса, поэтому я подумал, может быть, мне нужно очистить информацию о сеансепрежде чем войти снова.Похоже, этого не происходит в SDK Facebook, поэтому мне нужно реализовать это самостоятельно?
(6) Обновить веб-приложение в Facebook > Затем, чтобы убедиться, чтоЯ не сумасшедший, я захожу в Facebook и вижу, что я вошел в систему, а затем я запускаю веб-приложение через Facebook
http://apps.facebook.com/mywebapp/
, и что вы знаете, мое приложение отображает всю мою информацию о пользователе, токен доступа пользователя и все изнутри Facebook, однако = /
(7) Обновить автономное приложение > Затем я возвращаюсь в свое веб-приложение - обновляю его - и теперь у него есть всеинформация также!
Что плохого в том, что я не могу войти через свое приложение, используя PHP SDK?
Почему мое приложение не может видеть FacebookИдентификатор пользователя, когда его нет в приложении?