我的Ruby on Rails应用程序使用devise和user
模型具有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和密码?
我的错误在哪里?
答案 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 install
或bundle update
命令之后。
当我在开发计算机和生产服务器上比较宝石时,我发现omniauth-oauth2
gem有不同的版本。然后我回滚这个gem版本,应用程序开始工作。
感谢您的帮助!
更新:已在github
创建问题