2

Я боролся с этим в течение 2-х дней теперь:OmniAuth-facebook аутентификация всплывающего окна не возвращает omniauth.auth

У меня есть OmniAuth-Factbook реализован правильно с Завещанием. Теперь я хочу улучшить его, сделав проверку подлинности Facebook в всплывающем окне, а не на facebook.com. Я последовал Ryan's RailsCast и добавить display => 'popup' в моей конфигурацию поставщика в omniauth.rb

Я успешно загрузить войти в Facebook и получил возвращенный хэш request.authRequest, который содержит информацию о USERID.

Однако, когда я вернулся к обратному пути (/ auth/facebook/callback), я не получил: provider и: uid from request.evn [omniauth.auth], как раньше.

Почему omniauth hash не был создан, даже когда API Facebook вернул хэш-аутентификацию? Что я могу сделать, чтобы исправить эту проблему?

Моего контроллер для обработки facebook обратного вызова прост:

class ServicesController < ApplicationController 
    def create 
    auth = request.env["omniauth.auth"] 
    debugger 

Права на отладчике, когда я использую IRB, чтобы проверить, нет OmniAuth хэша в request.env.

Кстати, я думаю, что я перевернул печенье в моем CoffeeScript файле:

jQuery -> 
$('body').prepend('<div id="fb-root"></div>') 

    $.ajax 
    url: "#{window.location.protocol}//connect.facebook.net/en_US/all.js" 
    dataType: 'script' 
    cache: true 

window.fbAsyncInit = -> 
    FB.init(appId: '<%= "myAppID" %>', cookie: true) 

    $('#facebook_signin').click (e) -> 
    e.preventDefault() 
    FB.login (response) -> 
     window.location = '/auth/facebook/callback' if response.authResponse 

    $('#facebook_signout').click (e) -> 
    FB.getLoginStatus (response) -> 
     FB.logout() if response.authResponse 
    true 

Спасибо.

Обновление: мой omniauth.rb выглядит следующим образом:

Rails.application.config.middleware.use OmniAuth::Builder do 
    # The following is for facebook 
    provider :linkedin, '3yn', 'iMJ' 
    provider :twitter, 'SQ', 'T5fo' 
    provider :facebook, '081', 'e80', 
      scope: "email" 
end 
+0

У вас есть его как '/ app/assets/javascripts/services.js.coffee.erb'? Я пытаюсь убедиться, что понимаю '' <% = "myAppID"%> ''.Кажется, что слишком много наборов кавычек. –

+0

Привет, Остин? Я не уверен, что понимаю ваш вопрос, но у меня есть файл под названием facebook.js.coffee.erb, содержащий код coffeescript, упомянутый в моем вопросе. Там есть фактический идентификатор вместо myAppID, например '<%="12345" %> ''. Первая кавычка предназначена для инъекции элемента html, а вторая - для обертывания текстовой строки. – AdamNYC

+0

Если у вас это жестко закодировано, зачем вам это нужно в блоке ERB? –

ответ

0

(. Я должен ответить, а не комментарий, а я новый иш здесь)

Вы, кажется, смешивая вверх несколько вещей. Задание :display => 'popup' не вызывает всплывающее окно. Это опция, связанная с Facebook, которая определяет режим отображения формы входа в систему (здесь и здесь: https://developers.facebook.com/docs/reference/dialogs/oauth/)

Turn omniauth facebook login into a popup объясняет, что происходит, но вы, вероятно, не хотите поддерживать собственное всплывающее окно. JavaScript SDK для Facebook делает это с помощью функции FB.login (здесь: https://developers.facebook.com/docs/reference/javascript/FB.login/)

Трудно устранить неполадки без отправки всех соответствующих кодов. Из того, что вы написали, похоже, что сторона JavaScript работает правильно. Из любопытства, как выглядит ваш инициализатор omniauth.rb?

+0

Спасибо за указание ': display => 'popup''. Однако удаление этого не помогает. Я пытался от него отчаяться. Я вложу свой вопрос omniauth.rb в свой вопрос. – AdamNYC

0

я сделал некоторые тесты и читать комментарии Авиомодели в railscast и вы должны понизить драгоценный камень

камень «OmniAuth-facebook», «1.4.0»

Если Вам необходима дополнительная информация о нем:

http://railscasts.com/episodes/360-facebook-authentication?view=comments#comment_159418

здесь код: https://github.com/senayar/facebook_connect

надеюсь, что это помогает :)

+0

Привет senayar: спасибо за попытку помочь. Я попытался понизить «omniauth-facebook» до 1.4.0 раньше (после комментария), но это не сработало для меня. Не могли бы вы поделиться кодом на github? Я был бы очень признателен, поскольку я проводил дни, пытаясь разобраться в этом. – AdamNYC

+0

добавлен с возможностью для электронной почты пользователя. – rbinsztock

+0

Спасибо большое, senayar. Я фактически использую 1.4.0 сейчас. Я пробовал свой код на github, но он тоже не работает. Разочаровав, я тоже не получил сообщение об ошибке (так что он отличается от комментария на railscasts). Завтра я попробую ваш код. Вы успешно реализовали javascript версию omniauth-facebook с помощью Devise? Что вы пытались мне изменить? – AdamNYC

Смежные вопросы