Ruby on rails omniauth OAutheException&;OAuth::未经授权

Ruby on rails omniauth OAutheException&;OAuth::未经授权,ruby-on-rails,oauth,ruby-on-rails-3.1,omniauth,Ruby On Rails,Oauth,Ruby On Rails 3.1,Omniauth,我已经安装了omniauth 1.0。还有oauth-0.4.5、oauth2-0.5.1、omniauth-facebook-1.0.0、omniauth-twitter-0.0.6 omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :developer unless Rails.env.production? provider :facebook, ENV['167257

我已经安装了omniauth 1.0。还有oauth-0.4.5、oauth2-0.5.1、omniauth-facebook-1.0.0、omniauth-twitter-0.0.6

omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :developer unless Rails.env.production?
  provider :facebook, ENV['167257285348131'],     ENV['c8c722f697scb2afcf1600286c6212a9'],     :scope => 'email,offline_access,read_stream', :display => 'popup'
  provider :twitter, ENV['fma2L22ObJCW52QrL7uew'], ENV['4aZfhCAOdiS7ap8pHJ7I1OZslFwVWWLiAMVpYUI']

end

session_controller.rb
class SessionsController < ApplicationController
require 'omniauth-facebook'
require 'omniauth-twitter'
require 'omniauth'

def create
    @user = User.find_or_create_from_auth_hash(auth_hash)
    self.current_user = @user
    redirect_to '/'
end



def auth_hash
request.env['omniauth.auth']
end

end
omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
提供者:开发者,除非Rails.env.production?
提供者:facebook,环境['167257285348131',环境['c8c722f697scb2afcf1600286c6212a9',:范围=>'电子邮件,脱机访问,读取流',:显示=>'弹出窗口'
提供者:twitter、ENV['fma2L22ObJCW52QrL7uew',ENV['4AZFHCAODIS7AP8PHJ7I1OZSLFWVWWLIAMPYUI']
结束
会话_controller.rb
类sessioncontroller
我还要补充一点 “omniauth” “omniauth facebook” “omniauth twitter”gems到gemfile

有两个问题:

  • 当我走的时候,我得到 { “错误”:{ “消息”:“缺少客户端id参数。”, “类型”:“OAutheException” } }
  • 还有graph.facebook.com/oauth/authorize?response\u type=code&client\u id=&redirect\u uri=http%3A%2F%2folocalhost%3A3000%2Fauth%2facebook%2fackback&parse=query&scope=email%2Coffline\u访问%2Cread\u流&显示=popup 而且没有客户id

  • 当我去的时候,我得到了OAuth::未经授权
  • 401未经授权


    有什么想法吗?

    在omniauth 1.0中进行了突破性的更改-

    OmniAuth 1.0与版本0.x相比有一些突破性的更改。你可以 如果您不想使依赖关系更复杂,请将依赖关系设置为~>0.3.2 升级困难。有关更多信息,请参阅

    我将尝试将omniauth恢复到0.3.2:

    gem install omniauth --version '~> 0.3.2'
    
    或者,如果您正在使用bundler,请在您的文件中:

    gem omniauth, '~> 0.3.2'
    

    Alex D.是正确的,因为ENV[]会破坏它。要创建omniauth.rb以便在不同的环境中使用不同的密钥,只需放置:

    provider :twitter, TWITTER_KEY, TWITTER_SECRET
    
    在omniauth.rb中

    然后在您的环境配置文件(config/environments/development.rb等)中放入您想要用于该环境的密钥

    config/environments/development.rb:

    TWITTER_KEY = 'aaaaaaa'
    TWITTER_SECRET = 'aaaabbbbbb'
    
    config/environments/production.rb:

    TWITTER_KEY = 'ccccccc'
    TWITTER_SECRET = 'ccccdddddd'
    

    ENV['something']

    查看您的环境变量以查找“某物”,因此

    something='12345'

    所以你应该这样做

    export AUTH_FB_KEY='....'
    export AUTH_FB_SECRET='...'
    
    核对

    env
    
    并更新您的配置

    provider :facebook, ENV['AUTH_FB_KEY'], ENV['AUTH_FB_SECRET']
    
    如果你用heroku

    heroku config:add AUTH_FB_KEY='....'
    

    我恢复到0.3.2。很惊讶我也有同样的问题。啊,很抱歉听到这个。不久前我遇到了一个类似的问题,恢复到0.3.2为我解决了这个问题。我会查看其他相关gem的历史日志,确保一切看起来都很好?谢谢,但我在omniauth.rb中找到了原因。如果没有ENV[],它可以工作。你解决了facebook错误了吗?如果是的话,我能找到工作吗?我收到了同样的错误信息。如果我手动将客户机id添加到查询字符串中,则可以解决此问题parameters@VinaENV[]破坏了它。请尝试仅使用“”。例如:提供商:facebook,'167257285348131','c8c722f697scb2afcf1600286c6212a9',谢谢,这很有效!似乎我还需要重新启动webrickDI也有同样的问题!你知道为什么ENV[]会破坏这个吗?在我的例子中,它在facebook上运行良好,但在twitter上不起作用。在启动服务器之前,请尝试
    source~/.profile
    (或定义了环境变量的任何地方)。你只需要这样做一次。我认为你应该将这些文件添加到你的gitignore文件中,否则任何人都可以在你的repo中查看很多密钥?@Jeff Steil:这是存储密钥和API_SECRET的更好方法还是环境变量方法?我知道这是一个有争议的话题,但由于我目前是唯一的开发者,哪种方式更好?