Как получить код авторизации из Facebook javascript SDK - PullRequest
3 голосов
/ 26 октября 2011

Я настроил devise / omniauth, и теперь я хотел бы использовать javascript SDK Facebook для входа / запроса разрешений, а затем направить их на мой контроллер обратных вызовов omniauth.

Это то, что у меня есть (coffeescript).

$('#fb-connect').live 'click', ->
  FB.login ((response) ->
    if response.authResponse
      window.location = "/users/auth/facebook/callback?code=" + response.authResponse.signedRequest 
    else
      console.log "User cancelled login or did not fully authorize."
  ), scope: "email, offline_access"

  false

Но я получаю ошибку Invalid verification code format.Я предполагаю, что это потому, что параметр кода ожидает что-то другое, чем подписанный запрос?

Обновление

Похоже, мне нужно передать код авторизации, но я не могу найти как.Пример direct url показывает, что вы можете указать response_type = code для получения кода авторизации, но я не знаю, как это сделать с помощью FB.api.Есть идеи?

http://www.facebook.com/dialog/oauth/?
  scope=email,user_birthday&
  client_id=123050457758183&
  redirect_uri=http://www.example.com/response&
  response_type=code

Ответы [ 2 ]

2 голосов
/ 10 июля 2012

Просто если кто-нибудь еще наткнется на этот вопрос, вам не нужно передавать какие-либо параметры вашему контроллеру при использовании Devise / omniauth ... следующее прекрасно работает

$('#fb-connect').live 'click', ->
  FB.login ((response) ->
    if response.authResponse
      window.location = "/users/auth/facebook/callback
    else
      console.log "User cancelled login or did not fully authorize."
  ), scope: "email, offline_access"

  false

РЕДАКТИРОВАТЬ

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

<script>
  function fb_authorise(){
    FB.login(function(response) {
      if(response.authResponse) {
        window.location = "/users/auth/facebook/callback?signed_request=<%= params[:signed_request]%>"
      }
    }, {scope: "email, offline_access"});
  };
</script>

Таким образом, в ответ на свой исходный вопрос вы использовали параметр signature_request, а затем добавили к URL-адресу код = not signature_request

1 голос
/ 26 октября 2011

При авторизации на стороне клиента вам не нужно использовать «код». Этот response.authResponse, который у вас есть, уже будет содержать access_token. FB.login () уже сделал все это для вас. Где у вас есть "window.location = ...", пользователь вошел в систему.

Проверьте документ на аутентификация - убедитесь, что вы читаете раздел на стороне клиента. Также проверьте документ на fb.login

...