Как использовать одно и то же приложение для Facebook для разных сайтов - PullRequest
2 голосов
/ 14 марта 2011

Я разрабатываю небольшую CMS на PHP и мы включаем социальную интеграцию.

Содержание изменяется одним администратором, который имеет право на публикацию новостей, событий и так далее ...

Я бы добавил эту функцию, когда администратор публикует что-то, что уже опубликовано на стене в Facebook.Я не очень знаком с Facebook php SDK, и я немного запутался в этом.

Если (приведите пример) 10 разных сайтов используют мою CMS, нужно ли мне создавать 10 разных сайтов?приложение на фейсбуке?(предположим, что все 10 веб-сайтов находятся в разных доменах и на разных серверах)

2-й, есть ли способ аутентификации с помощью только PHP (что-то вроде прямой отправки имени пользователя и пароля), чтобы пользователю не нужно было заходить на Facebook?

спасибо

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Возможно, вы захотите разбить ваш вопрос на более мелкие понятные единицы. Очень трудно понять, к чему ты клонишь.

Мое понимание вашей проблемы может быть минимальным, но здесь идет ...

1_ Нет, вы не создаете 10 различных приложений Facebook. Создайте одно приложение Facebook и сделайте его точкой входа в сервис. Чтобы все ваши cms-сайты могли общаться с этим сайтом для взаимодействия с Facebook. (Сервисный уровень REST).

2_ Facebook api не поддерживает аутентификацию по имени пользователя и паролю. Они поддерживают только oauth2.0. Хотя Oauth не является тривиальным, но поскольку для этого предусмотрена библиотека, реализация аутентификации довольно тривиальна.

1 голос
/ 14 марта 2011

Пожалуйста, прочтите http://developers.facebook.com/docs/.

Это действительно легко, просто и понятно.

Ваш вопрос настолько расплывчатый и обширный, что на него нельзя ответить хорошо.

Если у вас есть какие-то конкретные проблемы с реализацией, это правильное место.

Однако, чтобы ответить хотя бы на часть вашего вопроса:

Самым мощным инструментом при работе с приложениями Facebook является Graph API.

Его принцип очень прост. Вы можете сделать любое действие от имени любого пользователя или приложения. Сначала вы должны сгенерировать токен, который идентифицирует пользователя и соответствующие разрешения. Эти токены можно сделать «постоянными», чтобы вы могли выполнять фоновые задачи. Обычно они активны только очень короткое время, поэтому вы можете выполнять действия, взаимодействуя с пользователем. В процессе генерации токенов пользователь должен подтвердить, какие права вы запрашиваете.

Для сайтов, которые публикуют что-то автоматически, вы, вероятно, сгенерируете постоянный токен, который будет активен один раз, если вы удалите приложение в настройках конфиденциальности.

В принципе, вы можете работать с любым приложением на любом веб-сайте. Там нет ограничений. Однако есть два способа генерирования токенов. Один связан с дополнительным запросом, а второй - со стороны клиента, который привязан к одному домену, указанному в настройках вашего приложения.

Приложение:

@ ArtoAle

вы правы в отношении каждого приложения, предназначенного только для одного домена. однако, как только вы получили действительный токен, не имеет значения, где или кто вы используете его в графе API.

позвольте мне объяснить это немного:

это не имеет смысла, так как это вы делаете запрос. нет такой вещи, как "откуда исходит запрос". конечно, есть информация заголовка "referer", но она может быть свободно указана и не используется ни в каком контексте этого.

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

почему

это гарантирует, что какой-то злоумышленник не сможет настроить веб-сайт на каком-либо домене, и позволит пользователю авторизовать приложение и получить токен доступа с ВАШИМ приложением.

, поэтому этот параметр гарантирует, что пользователь и маркер доступа будут перенаправлены обратно на ВАШ сайт, а не на другой плохой сайт.

но есть альтернатива. если вы используете поток управления для настольных приложений, вы не получите токен доступа сразу после перенаправления пользователя обратно. вы получаете временный токен сессии, который вы можете обменять на токен доступа. этот обмен выполняется на стороне сервера поверх API REST и требует секретности вашего приложения. Таким образом, на данном этапе гарантируется, что именно ВЫ получаете токен.

Этот метод можно использовать в любом домене или в случае настольных приложений без домена.

Это цитата из документации Faceboo:

Чтобы конвертировать сеансы, отправьте POST запросить https://graph.facebook.com/oauth/exchange_sessions с разделенным запятыми списком сеансы, которые вы хотите конвертировать:

curl client_id = your_app_id \ -F client_secret = your_app_secret \ -F сессий = 2.DbavCpzL6Yc_XGEI0Ip9GA __. 3600.1271649600-12345,2.aBdC ... \ https://graph.facebook.com/oauth/exchange_sessions Ответ на запрос JSON массив токенов доступа OAuth в в том же порядке, что и данные сессии:

[{ "access_token": "...", "expires": 1271649600,}, ...]

Однако вам не нужен этот метод, так как он немного сложнее. Для вашего случая использования я бы предложил использовать центральную точку авторизации.

Таким образом, вы бы указали свой ОДИН домен в качестве URL-адреса перенаправления. Этот домен чем ПОДЕЛЕН между вашими сайтами. там вы можете получить полностью действительный токен доступа и беспрепятственно перенаправить пользователя обратно на веб-сайт вашего конкретного проекта и передать токен доступа.

Таким образом, вы можете использовать традиционную простую процедуру аутентификации, которая, вероятно, также более надежна в будущем.

Факт остается фактом.Как только токен доступа сгенерирован, вы можете выполнить любое действие из любого домена, нет никакой разницы, поскольку буквально нет «домена», из которого поступает запрос (см. Выше).

, кроме этого, если вычтобы некоторые приятные функции JavaScript работали - например, поле для комментариев или кнопка «Мне нравится», вам необходимо правильно настроить теги open graph .

, если у вас есть проблемы с реализацией или, как вы сказали, «домен»ошибки ", пожалуйста, опишите их более четко, включите шаги, которые вы сделали, и, если возможно, сообщение об ошибке.

...