Devise & Omniauth-soundcloud 错误——invalid_request:缺少必需的参数:client_id

Devise & Omniauth-soundcloud error -- invalid_request: Required parameter is missing: client_id

使用 Rails 4.2.2

与这个问题所发生的问题非常相似:Missing client_id with Devise and Facebook-Omniauth

除了这是针对 omniauth-soundcloud 的,上面的问题没有实际答案。选择的答案是遵循 railscast,这是我一开始就一直在做的设置。 (我正在关注 railscast pro #235)

我的devise.rb:

config.omniauth :soundcloud, ENV["blablabla"], ENV["blablabla"]

(显然 blablabla 是我的客户 ID 和密码)

宝石文件:

gem 'devise'
# gem 'omniauth'
gem 'omniauth-soundcloud', '~> 1.0.0'
# gem 'omniauth-oauth2'

(将这两个注释掉,因为网上的一些答案说注释掉它们可以解决问题,但对我来说不是这样)

我的user.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 初始值设定项发生冲突,因此这也不是解决方案。

想通了。只是不要跟随 railscast。请改为:

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

我的特殊问题是我需要在用户模型中声明 omniauth_providers:

devise :database_authenticatable, :registerable, :omniauthable, 
     :recoverable, :rememberable, :trackable, :validatable, omniauth_providers: [:soundcloud]

我还必须改变我的 devise.rb 远离 omniauth-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' }

这应该为遇到此问题的任何人解决。