使用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初始化程序冲突,因此也不是解决方案。
答案 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' }
对于遇到此问题的人来说,这应该可以解决。