2015-06-17 6 views
0

Начиная с ... обновления 4-летнего приложения Canvas Facebook до последнего PHP SDK (4.0.23).Создание приложения Facebook Canvas - логин и валидация в PHP SDK

Как я понимаю, поток что-то вроде:

1) Facebook называет мое приложение (mydomain.com/myApp)

2) Мне нужно, чтобы определить, является ли эта учетная запись Facebook вошел в мой app уже - выглядит как signed_request встречается, если нет.

3) Я создаю FacebookRedirectLoginHelper с моим url приложения (mydomain.com/myApp), а затем создаю loginUrl. Затем пользователь должен щелкнуть по нему.

4) Facebook выдает запрос на разрешение и, если пользователь принимает, обращается к моему URL-адресу приложения. На этот раз вместо signed_request я получаю код. На этом этапе - снова ли я создаю FacebookRedirectLoginHelper для обработки моей сессии? Или, как предлагает документ PHP SDK, я создаю FacebookCanvasLoginHelper?

4a) Чтение кода для FacebookCanvasLoginHelper, кажется, что я должен вызывать $ helper-> instantiateSignedRequest ($ signedRequest), прежде чем я смогу его использовать, иначе там не будет подписанного запроса. Но подписанный запрос, который я получил в первый раз, не имеет в нем данных oauth, поэтому getSession() терпит неудачу.

4b) Если я использую FacebookRedirectLoginHelper, я получаю сеанс назад, но в нем нет signed_request. Поэтому я не могу получить идентификатор пользователя. Если я нажимаю signed_request, который у меня есть в объекте FacebookSession, все равно ничего, потому что у этого начального signed_request его нет.

Что мне здесь не хватает? Мне нужен идентификатор Facebook, который хранится локально, чтобы сообщить моему приложению, которое его запускает.

Помощь? Мысли? Я должен что-то упустить, потому что у других людей это работает, верно?

andy

+0

Вы действительно должны рассмотреть вопрос об использовании JS SDK для целей входа в систему - это не нужно для перенаправления с холста, но просто накладывает диалоговое окно входа в систему на странице, что значительно улучшает работу пользователя. – CBroe

+0

Хотя это вполне может быть хорошим вариантом для рассмотрения, это не помогает мне решить текущую проблему - это делает работу PHP SDK.Спасибо, я займусь этим, когда получу несколько запасных циклов. –

ответ

1

Ваш последний шаг (4а) является правильным. Сеанс, который у вас есть, не содержит пользовательской информации, это просто сеанс, который вам нужно будет использовать, чтобы снова вызвать API и получить все, что захотите. Вы можете рассматривать это как эквиваленты маркеров доступа, на самом деле, если у вас есть маркер доступа, вы можете даже создать объект сессии сделать это:

$session = new FacebookSession('access token here'); 

После того, как у вас есть объект сеанса, вы должны вызвать график API, чтобы получить информацию, которую вы хотите:

$request = new FacebookRequest($session, 'GET', '/me'); 
$response = $request->execute(); 

Все объясняется в документации: https://developers.facebook.com/docs/php/gettingstarted/4.0.0

Я надеюсь, что это помогает.

Edit: Я создал простой пример Facebook входа в систему с помощью PHP SDK: https://github.com/javierdelacueva/facebook-php-login-example пожалуйста, не стесняйтесь, чтобы посмотреть

+0

Ну, я немного смущен этим. Во-первых, в документации ничего не говорится о необходимости использовать экземпляр instantiateSignedRequest для правильной настройки помощника холста. Я понял это, прочитав код для этого помощника и определив, что он был Отсутствует. Кроме того, помощник canvas не имеет функции «get login url», и мне нужно передать управление обратно в FB, чтобы получить разрешения. СМ. СЛЕДУЮЩИЙ КОММЕНТАРИЙ –

+0

Таким образом, мне удалось получить что-то вроде работы с использованием подкласса FacebookRedirectLoginHelper (используя мою собственную обработку сеанса), которая позволяет передавать URL-адрес переадресации на facebook и получать разрешения, но когда facebook возвращается после получения этих разрешений, она теряет контекст - просто перенаправляет обратно в мое веб-приложение, выпрыгивая из iFrame, поэтому что-то по-прежнему не так. Спасибо за ваш ответ. –

+0

Не уверен, что вы делаете, я думаю, вы, возможно, неправильно поняли документы. Во всяком случае, я создал простой пример для входа в Facebook с помощью PHP SDK: https://github.com/javierdelacueva/facebook-php-login-example Как вы можете видеть, я просто использую информацию, представленную в документах. Я надеюсь, что это помогает. –