使用Rails 4.2.2
与这个问题非常相似的问题:Devise和Facebook Omniauth 缺少client_id
除了这是针对omnauth soundcloud的,并且上面的问题没有实际的答案。选择的答案是遵循railscast,这就是我最初所做的设置。(我正在关注railscast pro#235)
我的设备.rb:
config.omniauth :soundcloud, ENV["blablabla"], ENV["blablabla"]
(显然blablabla是我的客户id和秘密)
Gemfile:
gem 'devise'
# gem 'omniauth'
gem 'omniauth-soundcloud', '~> 1.0.0'
# gem 'omniauth-oauth2'
我的用户.rb:
devise :database_authenticatable, :registerable, :omniauthable,
:recoverable, :rememberable, :trackable, :validatable
即使在URL中,我也可以看到客户端id缺失,但我在我的devise.rb文件中定义了它,如所示
https://soundcloud.com/connect?client_id=&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fusers%2Fauth%2Fsoundcloud%2Fcallback.....
我不明白为什么没有传递客户id。我错过什么了吗?我也应该在其他地方定义它吗?有一个omniauth.rb文件来定义它将与devise.rb初始值设定项冲突,所以这也不是解决方案。
想明白了。只是不要跟着铁轨走。请按照以下步骤操作:
https://github.com/plataformatec/devise/wiki/OmniAuth:-概述
我的特殊问题是,我需要在用户模型中声明omnauth_providers:
devise :database_authenticatable, :registerable, :omniauthable,
:recoverable, :rememberable, :trackable, :validatable, omniauth_providers: [:soundcloud]
我还不得不将我的devise.rb从omnauth soundcloud的建议中更改为:
config.omniauth :soundcloud, ENV["SOUNDCLOUD_CLIENT_ID"], ENV["SOUNDCLOUD_CLIENT_SECRET"]
到此:
config.omniauth :soundcloud, "SOUNDCLOUD_CLIENT_ID", "SOUNDCLOUD_CLIENT_SECRET", client_options: { redirect_uri: '/users/auth/soundcloud/callback' }
这应该可以为任何有此问题的人修复它。