Вход в Facebook с использованием OAuth 2.0

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

Я попытался использовать метод OAuth 2.0, который делает перенаправление на этот URL-адрес.

https://www.facebook.com/dialog/oauth?
    client_id=YOUR_APP_ID
   &redirect_uri=YOUR_REDIRECT_URI
   &scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES
   &state=SOME_ARBITRARY_BUT_UNIQUE_STRING

Я успешно аутентифицировал пользователя, но теперь возникла основная проблема. Как мне получить доступ к данным, которые отправляются в качестве ответа, все, что я вижу, это переменная GET с именем code и какой-то длинный текст. Как преобразовать данные в пригодные для использования?

Я использую php для своего сайта


person Abhijith    schedule 13.06.2012    source источник
comment
Вы заглядывали в обширную документацию на developer.facebook.com? Там вы можете найти рабочий пример на php для получения информации о пользователе: developers.facebook .com/docs/reference/php/facebook-api   -  person stUrb    schedule 13.06.2012


Ответы (4)


Обмен кода на токен доступа пользователя

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

https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID
&redirect_uri=YOUR_REDIRECT_URI
&client_secret=YOUR_APP_SECRET
&code=CODE_GENERATED_BY_FACEBOOK

Параметр client_secret должен быть секретом приложения, как показано в настройках вашего приложения. Тело ответа на этот запрос будет представлять собой закодированную строку URL вида:

access_token=USER_ACESS_TOKEN&expires=NUMBER_OF_SECONDS_UNTIL_TOKEN_EXPIRES

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

По истечении срока действия токена доступа он становится недействительным и больше не может использоваться в запросах к API. Чтобы получить новый токен доступа пользователя, вы должны снова передать пользователя через этот поток. Однако, если пользователь не деавторизовал ваше приложение, и вы не запрашиваете никаких разрешений, кроме тех, которые пользователь уже предоставил вашему приложению, диалоговое окно отображаться не будет, и пользователь будет прозрачно перенаправлен на ваш redirect_uri со свежим кодом, который можно обменять на новый токен доступа пользователя.

Если возникает проблема с обменом кода на токен доступа пользователя, сервер авторизации выдаст HTTP 400 и вернет ошибку в виде объекта JSON в теле ответа:

{
   "error": {
      "type": "OAuthException",
      "message": "Error validating verification code."
   }
}

Для получения дополнительной информации проверьте http://developers.facebook.com/docs/authentication/server-side/

Выполнение запросов к Graph API

Имея действительный токен доступа пользователя, вы можете отправлять запросы на чтение и запись данных из Graph API. Распространенным первым запросом будет получение основной информации (включая идентификатор и имя) пользователя, который только что аутентифицировал ваше приложение:

https://graph.facebook.com/me?access_token=YOUR_USER_ACCESS_TOKEN
person Viren Rajput    schedule 13.06.2012
comment
Итак, ответ, о котором вы говорите, какой формат ответа, это ответ GET или вам нужно использовать какой-то другой способ анализа данных - person Abhijith; 13.06.2012
comment
код доступен как переменная $_GET['code']. Просто замените код на access_token, и вы готовы выполнять вызовы API для получения пользовательских данных. - person Viren Rajput; 13.06.2012

Существует официальный SDK для php от Facebook. Что облегчает жизнь.

Проверьте этот пример кода.

person Venu    schedule 13.06.2012

Общая концепция OAuth 2.0 с facebook выглядит следующим образом.

Шаг 1. Получите «Код авторизации» с помощью GET-запроса

request URI: https://www.facebook.com/dialog/oauth
Params:
    response_type=code
    client_id={add your "App id" got by registering app}
    redirect_uri={add redirect uri defined at the registration of app}
    scope={add the scope needed in your app}
Headers: None

Шаг 2. Получите «Токен доступа», отправив код авторизации в виде POST-запроса.

request URI: https://graph.facebook.com/oauth/access_token
Params:
    grant_type=authorization_code
    client_id=<add your "App id" got by registering app>
    redirect_uri=<add redirect uri defined at the registration of app>
    code=<obtained authorization code from previous step>
Headers:
    Authorization:Basic encode <App Id:App Secret> with base64 
    Content-Type:application/json

Шаг 3. Используйте токен доступа, полученный на предыдущем шаге, и извлеките пользовательские ресурсы.

person Ashane.E    schedule 25.09.2019
comment
Также не забудьте прочитать документацию facebook, потому что они постепенно обновляют изменения, а некоторые из них устаревают. - person Ashane.E; 25.09.2019

Используйте декодер JSON WEB TOKEN (JWT), чтобы получить данные, которые находятся в token_id, который вы получите при печати содержимого GET ['code']. В этом выберите token_id, скопируйте его и вставьте в онлайн-декодер.

person Akash C    schedule 29.11.2018