Как использовать Facebook PHP SDK для входа пользователей в мое приложение? - PullRequest
1 голос
/ 09 августа 2011

Я новичок в разработке с помощью 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Идентификатор пользователя, когда его нет в приложении?

1 Ответ

2 голосов
/ 15 августа 2011

Это действительно глупо, но в основном API был сломан.Facebook недавно исправил это, так что теперь у меня больше нет этих проблем!= /

...