Devise omniauth 因未知原因停止工作
Devise omniauth stopped working for some unknown reason
我在 Rails 应用程序上有 Ruby 使用 devise 和 user
模型具有 omniauthable
属性,即用户可以通过社交网络帐户登录(应用程序允许 google 和 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 和秘密?
我的错误在哪里?
添加文件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']
可能您在开发中删除了您的设计密钥。
使用rake secret
生成一个。
问题出在 omniauth-oauth2
gem 中,很可能出现在 bundle install
或 bundle update
命令之后。
当我在开发计算机和生产服务器上比较 gems 时,我发现 omniauth-oauth2
gem 有不同的版本。然后我回滚这个 gem 版本并且应用程序开始工作。
感谢帮助!
更新:问题已在 github
创建
我在 Rails 应用程序上有 Ruby 使用 devise 和 user
模型具有 omniauthable
属性,即用户可以通过社交网络帐户登录(应用程序允许 google 和 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 和秘密?
我的错误在哪里?
添加文件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']
可能您在开发中删除了您的设计密钥。
使用rake secret
生成一个。
问题出在 omniauth-oauth2
gem 中,很可能出现在 bundle install
或 bundle update
命令之后。
当我在开发计算机和生产服务器上比较 gems 时,我发现 omniauth-oauth2
gem 有不同的版本。然后我回滚这个 gem 版本并且应用程序开始工作。
感谢帮助!
更新:问题已在 github
创建