Аутентификация в приложении Facebook Canvas с использованием New Graph API - PullRequest
5 голосов
/ 21 июля 2010

Я создаю приложение на холсте Facebook, которое загружается в iframe с Django.Я хотел бы, чтобы процесс входа в систему работал так же, как это делает Zynga.В этом методе, если вы не вошли в систему, вы будете перенаправлены на страницу входа в Facebook, а затем на страницу запроса разрешений для приложения (без всплывающих окон).

Насколько я могу судить, Zynga должна использоватьFBML и просто переадресация на URL-адреса, которые выглядят следующим образом:

http://www.facebook.com/login.php?api_key=[api_key]&canvas=1&fbconnect=0&next=[return_url]

В любом случае можно ли добиться аналогичного эффекта в приложении Python, которое загружается в iframe?

Существует метод здесь , который показывает, как добиться правильного перенаправления с использованием нового php SDK, но я пытаюсь использовать новый Python SDK, который имеет только метод:

def get_user_from_cookie(cookies, app_id, app_secret):
"""
Parses the cookie set by the official Facebook JavaScript SDK.
cookies should be a dictionary-like object mapping cookie names to
cookie values.
...
"""

У меня есть некоторый рабочий код, который использует Javascript SDK и метод get_user_from_cookie:

<div id="fb-root">
 <script src="http://connect.facebook.net/en_US/all.js"></script>
</div>

<script type="text/javascript">
 FB.init({ apiKey: 'apikey', status: true, cookie: true, xfbml: true});

 FB.Event.subscribe('auth.login', function(response) {
  // Reload the application in the logged-in state
  window.top.location = 'http://apps.facebook.com/myapp/';
 });
</script>
<fb:login-button>Install MyApp</fb:login-button>

Проблема с этим методом заключается в том, что пользователю требуется нажать кнопку для входа в систему, а затем пройти черезвсплывающие экраны аутентификации.(Примечание: всплывающее окно также появляется, если я вызываю FB.login напрямую)

Итак ... есть ли способ использовать javascript SDK для перенаправления на страницу входа вместо загрузки его в виде всплывающего окна?

Спасибо за любую помощь!--Eric

Ответы [ 2 ]

13 голосов
/ 11 ноября 2010

Есть ли способ использовать javascript SDK для перенаправления на страницу входа, а не загружать ее как всплывающее окно?

Нет. JavaScript SDK откроет новое окно, а не перенаправит текущее окно.

Чтобы предоставить пользователю полноэкранную версию диалогового окна авторизации, вам необходимо перенаправить его на https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}. Обратите внимание, что вы не можете сделать это из серверного кода, так как это только перенаправит iframe, а Facebook не разрешит этого. Вам понадобится промежуточный документ, который перенаправляет родительское окно.

<!DOCTYPE html>

<!--
This document redirects the parent window to the authorization
dialog automatically, or falls back to a link if the client does not
support JavaScript.
-->

<html>
  <head>
    <script type="text/javascript">
      window.parent.location = 'https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}';
    </script>
  </head>

  <body> 
    You must <a target="_top" href="https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}">authorize this application</a> in order to proceed.
  </body>
</html>

Как только пользователь авторизует ваше приложение, он или она будет перенаправлен на URI, указанный вами в redirect_uri, и Facebook заполнит параметр GET signed_request всеми видами полезной информации (см. документацию по подписанные запросы ), которые можно использовать для отправки запросов в Facebook от имени пользователя.

Обратите внимание, что если вы планируете сохранить этот подписанный запрос (или что-либо еще) в cookie-файле в приложении Canvas, вам нужно установить компактные политики P3P в своих заголовках; в противном случае все версии Internet Explorer будут игнорировать ваши файлы cookie.

P3P: CP="IDC CURa ADMa OUR IND PHY ONL COM STA"

Я написал библиотеку, которая позволяет очень легко создавать приложения для холста на Facebook на основе Django, которые позаботятся обо всем этом за вас. Он называется Fandjango и доступен на github.

0 голосов
/ 11 ноября 2010

Вы должны использовать OAuth, как описано в документации о аутентификации в Canvas Applications .

Python SDK, который вы уже используете, содержит пример , который вы должны быть готовы использовать практически из коробки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...