2015-10-26 2 views
0

У меня есть приложение Ruby on Rails, которое использует devise, а user имеет атрибут omniauthable, то есть пользователи могут входить через учетные записи социальной сети (приложение разрешает Google и связанные с ним).Devise omniauth перестала работать по неизвестной причине

Войти через социальные сети работало, пока не попытаюсь настроить подтверждение по электронной почте для регистрации. Теперь любая попытка социальной регистрации вызывает ошибку Invalid credentials, altough config.omniauth строк и переменных среды с учетными данными не изменились.

В режиме производства социальная регистрация по-прежнему работает, и я загружаю старый код с сервера (среда разработки и производства использует те же учетные данные). Но это не помогло, и я до сих пор не могу использовать социальные сети для входа в мое приложение в режиме разработки. Я думал, что кеш браузера является причиной этой ошибки, но в других браузерах я видел такое же сообщение об ошибке.

Мой devise.rb код:

Devise.setup do |config| 

    config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'] 
    config.omniauth :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'] 

user.rb:

class User < ActiveRecord::Base 
    devise :database_authenticatable, 
     :registerable, 
     :recoverable, 
     :rememberable, 
     :trackable, 
     :validatable, 
     :omniauthable, 
     :omniauth_providers => [ 
      :google_oauth2, 
      :linkedin 
     ] 

правильно понимаю ли я, что учетные данные социальной сети идентификатор приложения и секрет?

Где моя ошибка?

ответ

0

Проблема была в omniauth-oauth2 gem и, скорее всего, появилась после bundle install или bundle update команда.

Когда я сравнивал драгоценные камни на компьютере разработки и производственном сервере, я обнаружил, что у драгоценного камня omniauth-oauth2 разные версии. Затем я откатил эту версию gem, и приложение начало работать.

Благодарим за помощь!

Update: проблема уже создан в github

0

Добавить файл конфигурации/api_keys.yml

defaults: &defaults 
    linkedin: 
    api_key: "KEY" 
    api_secret: "SECRET" 

    development: 
    <<: *defaults 

    production: 
    linkedin: 
     api_key: "KEY2" 
     api_secret: "SECRET2" 

Тогда в моем файле devise.rb я:

API_KEYS = YAML::load_file("#{Rails.root}/config/api_keys.yml")[Rails.env] 
config.omniauth :linkedin , API_KEYS['linkedin']['api_key'], API_KEYS['linkedin']['api_secret'] 
+0

Это не помогло. Насколько я понимаю, ваш ответ решает проблему с получением ключей и секретов. Но когда я отлаживал приложение, '' 'ENV ['LINKEDIN_KEY']' 'и' '' API_KEYS ['linkedin'] ['api_key'] '' 'возвращал те же значения. В обеих версиях разработки и разработки используются те же ключи и секреты, и я уверен, что значения правильны из-за того, что производственный сервер работает правильно. –

0

Возможно, вы удалили свой DEViSE секретный ключ в развитии.

Используйте rake secret, чтобы сгенерировать его.

+0

Нет, это не помогло :( –

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