Разбор куки с потоком клиентов Omniauth-facebook - PullRequest
2 голосов
/ 01 января 2012

У меня есть старое приложение, которое я работаю, чтобы преобразовать в Omniauth, поскольку приложение в настоящее время подключается к нескольким сторонним платформам, таким как Twitter и Facebook.Интеграция Omniauth для Facebook на стороне клиента требует гораздо больше времени, чем создание его с нуля.Хочу сделать еще один шаг, надеюсь, с учетом мнения сообщества здесь.

Я следовал примеру в omniauth-facebook в приложении / example Sinatra для потока на стороне клиента, но я продолжаю получать следующееошибка в моих журналах:

Started GET "/auth/facebook/callback" for 127.0.0.1 at Sat Dec 31 07:52:01 -0500 2011 
Started GET "/auth/failure?message=invalid_credentials" for 127.0.0.1 at Sat Dec31 07:52:04 -0500 2011

Processing by FacebookUsersController#failure as    Parameters {"message"=>"invalid_credentials"}

Мне удалось заставить это работать, используя поток на стороне сервера в другой ветви, возникли проблемы с потоком на стороне клиента.Вот соответствующие файлы.Что происходит?

config / initializers / omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'xxx', 'xxx', :scope => 'email', :display => 'popup'
end

config / rout.rb

  match '/auth/:provider/callback' => 'facebook_users#login_or_register_fb_user'
  match '/auth/failure' => 'facebook_users#failure'

app / views / layouts / application.haml Это на самом деле включено в макет через партиал, который является последним, что нужно загрузить на страницу.

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'xxx', // App ID
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });

    // Additional initialization code here
  };

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     d.getElementsByTagName('head')[0].appendChild(js);
   }(document));

   $(function() {
     $('.facebook_button').click(function(e) {
       e.preventDefault();

       FB.login(function(response) {
         if (response.authResponse) { 
           $.get('/auth/facebook/callback');
         }
       }, { scope: 'email'});


     });
   });
</script>

app / controllers / facebook_users_controller.rb

class FacebookUsersController < ApplicationController

  def login_or_register_fb_user
    respond_to do |f|
        f.js {
          MultiJson.encode(request.env)
        }
    end
  end 
  def failure
    respond_to do |f|
         f.js {
           MultiJson.encode(request.env)
         }
    end
  end
end

Любые идеи, почему я вижу "/ auth / fail? message = invalid_credentials" в моих журналах, когда я пытаюсь войти в систему пользователя Facebook?Есть ли что-то, что мне нужно в контроллере приложения - фильтр перед анализом файла cookie Facebook или что-то в этом роде?Я в недоумении здесь.Я уверен, что мои настройки верны, иначе.

Настройки Facebook для этого приложения:

Спасибо за руку.

...