2014-09-01 6 views
1

Im, использующий devise omniauthable для аутентификации пользователей как с помощью google, так и с facebook. Google работает нормально, но facebook застревает на странице переадресации, хотя на их платформе пользователь входит в систему правильно (на facebook).устройство facebook oAuth застрял на странице перенаправления

Это журнал я получаю:

2014-09-01T15:26:41.996884+00:00 app[web.1]: (facebook) Request phase initiated. 
2014-09-01T15:26:42.211524+00:00 app[web.1]: (facebook) Request phase initiated. 
2014-09-01T15:26:41.994627+00:00 app[web.1]: Started GET "https://stackoverflow.com/users/auth/facebook?locale=es" for 190.15.201.45 at 2014-09-01 15:26:41 +0000 
2014-09-01T15:26:42.205674+00:00 app[web.1]: Started GET "https://stackoverflow.com/users/auth/facebook?locale=es" for 190.15.201.45 at 2014-09-01 15:26:42 +0000 
2014-09-01T15:26:42.217355+00:00 heroku[router]: at=info method=GET path="https://stackoverflow.com/users/auth/facebook?locale=es" host=myapp.herokuapp.com request_id=2b9aab45-c511-4ac9-b36f-4e6925cba3aa fwd="190.15.201.45" dyno=web.1 connect=2ms service=16ms status=302 bytes=1284 

Мои маршруты:

devise_for :users, :controllers => { omniauth_callbacks: "users/omniauth_callbacks" } 

Мой omniauth_callbacks_controller:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 

def self.provides_callback_for(provider) 
class_eval %Q{ 
    def #{provider} 
    @user = User.find_for_oauth(env["omniauth.auth"], current_user) 

    if @user.persisted? 
     sign_in_and_redirect @user, event: :authentication 
     set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format? 
    else 
     session["devise.#{provider}_data"] = env["omniauth.auth"] 
     redirect_to new_user_registration_url 
    end 
    end 
} 
end 

[:google_oauth2, :facebook].each do |provider| 
    provides_callback_for provider 
end 

Моя модель пользователя:

class User < ActiveRecord::Base 

devise :database_authenticatable, :confirmable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :omniauthable 

belongs_to :company 

before_save :create_user_company 

def create_user_company 
    if self.company_id.nil? 
    company = Company.new 
    company.email = self.email 
    company.save 
    self.company_id = company.id 
    self.admin = true 
    end 
end 

def self.find_for_oauth(auth, signed_in_resource = nil) 
    identity = Identity.find_for_oauth(auth) 
    user = signed_in_resource ? signed_in_resource : identity.user 

    if user.nil? 
    email = auth.info.email 
    user = User.where(:email => email).first if email 

    if user.nil? 
     user = User.new(
     name: auth.extra.raw_info.name, 
     email: email ? email : "[email protected]", 
     password: Devise.friendly_token[0,20] 
    ) 
     user.skip_confirmation! 
     user.save! 
    end 
    end 

    if identity.user != user 
    identity.user = user 
    identity.save! 
    end 

    user 

end 

end 

Разрабатывают инициализатор является основным:

config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET'] 

Но я также попытался this (не работал):

config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET'],{client_options: {ssl: {ca_file: Rails.root.join('lib/assets/cacert.pem').to_s}}} 

И им с помощью этой жемчужины:

gem 'omniauth' 
gem 'omniauth-google-oauth2' 
gem 'omniauth-facebook' 
gem 'devise' 
gem 'figaro' #for safe saving of env vars 

Я был бы признателен за любые подскажите, что у вас есть. Спасибо заранее.

PS: this не ответ

+0

Что-то принять во внимание это никогда не получает "метод = GET путь ="/пользователей/аутентификации/facebook/Обратный вызов». Только "метод = GET путь ="/ пользователей/аутентификации/facebook », а затем он обманывает. – ntonnelier

+0

+ в браузерах Сетевая консоль: я получаю «внутреннюю ошибку сервера 500», – ntonnelier

ответ

0

Хорошо, если кто-то сталкивается с той же проблемой, это зафиксировал его:

  • Зайдите в консоль разработчиков facebook (developers.facebook)
  • Введите Приложение:
    1. При настройке вам необходимо добавить контактное письмо.
    2. О статусе и отзывах вы найдете этот вопрос (бывшая песочница): «Вы хотите сделать это приложение и все его живые функции доступными для широкой публики?». Нажмите «Да».
Смежные вопросы