由于某种未知原因,设计omniauth停止工作

时间:2015-10-26 12:57:02

标签: ruby-on-rails devise omniauth

我的Ruby on Rails应用程序使用deviseuser模型具有omniauthable属性,即用户可以通过社交网络帐户登录(应用程序允许谷歌和linkedin)。

通过社交网络登录工作,直到我尝试设置电子邮件确认注册。 现在,任何社交注册尝试都会导致Invalid credentials错误,尽管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
        ]

我是否正确理解凭据是社交网络应用程序ID和密码?

我的错误在哪里?

3 个答案:

答案 0 :(得分:0)

添加文件config / 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']

答案 1 :(得分:0)

您可能已经删除了开发中的设计密钥。

使用rake secret生成一个。

答案 2 :(得分:0)

问题发生在omniauth-oauth2 gem中,很可能出现在bundle installbundle update命令之后。

当我在开发计算机和生产服务器上比较宝石时,我发现omniauth-oauth2 gem有不同的版本。然后我回滚这个gem版本,应用程序开始工作。

感谢您的帮助!

更新:已在github

创建问题