设计与发展Omniauth-soundcloud错误 - invalid_request:缺少必需参数:client_id

时间:2015-06-26 22:14:19

标签: ruby-on-rails devise omniauth soundcloud

使用Rails 4.2.2

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

除了这是omniauth-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'

(评论那两个因为网上的一些答案说评论它们解决了问题,但不是我的情况)

我的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初始化程序冲突,因此也不是解决方案。

1 个答案:

答案 0 :(得分:1)

想出来。只是不要跟随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' }

对于遇到此问题的人来说,这应该可以解决。