【问题标题】:omniauth OAuthException & OAuth::Unauthorizedomn​​iauth OAuthException & OAuth::Unauthorized
【发布时间】:2012-01-06 00:19:10
【问题描述】:

我已经安装了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-facebook' 'omniauth-twitter' gem 到 gemfile

有两个问题:

  1. 当我去http://localhost:3000/auth/facebook 我得到 { “错误”: { "message": "缺少 client_id 参数。", “类型”:“OAuthException” } }

还有链接 graph.facebook.com/oauth/authorize?response_type=code&client_id=&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Ffacebook%2Fcallback&parse=query&scope=email%2Coffline_access%2Cread_stream&display=popup 而且没有client_id!!!

  1. 当我转到 http://localhost:3000/auth/twitter 时,我得到 OAuth::Unauthorized

401 未经授权

有什么想法吗?

【问题讨论】:

  • 你解决了facebook错误吗?如果是,我可以解决这个问题吗?我收到相同的错误消息。手动添加client_id查询字符串参数即可解决
  • @Vina ENV[] 打破了它。尝试仅使用“”。例如:提供者:facebook、'167257285348131'、'c8c722f697scb2afcf1600286c6212a9'
  • 谢谢,它工作!看来我还需要重新启动webrick。 :D
  • 我遇到了同样的问题!你知道为什么 ENV[] 会破坏这个吗?就我而言,它适用于 facebook,但不适用于 twitter。
  • 在启动服务器之前尝试source ~/.profile(或任何你定义了环境变量的地方)。你只需要这样做一次。

标签: ruby-on-rails oauth ruby-on-rails-3.1 omniauth


【解决方案1】:

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='....'

【讨论】:

    【解决方案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'
    

    【讨论】:

    • 我认为您将这些文件添加到您的 gitignore 文件中,否则任何人都可以在您的存储库中查看很多密钥?
    • @Jeff Steil:这是存储 KEY 和 API_SECRET 的更好方法还是环境变量方法?我知道这是一个值得商榷的话题,但由于我目前是唯一的开发者,哪一个是更好的方法?
    【解决方案3】:

    omniauth 1.0 发生了重大变化 - https://github.com/intridea/omniauth

    OmniAuth 1.0 与 0.x 版相比有几个重大更改。你可以 如果你不想做更多,请将依赖项设置为 ~> 0.3.2 升级困难。请参阅wiki 了解更多信息。

    我会尝试将omniauth 恢复到0.3.2:

    gem install omniauth --version '~> 0.3.2'
    

    或者,如果您使用的是捆绑程序,请在 Gemfile 中:

    gem omniauth, '~> 0.3.2'
    

    【讨论】:

    • 我恢复到 0.3.2。令人惊讶的是我也有同样的问题。
    • 啊,很遗憾听到这个消息。不久前我遇到了类似的问题,恢复到 0.3.2 为我解决了这个问题。我会查看其他相关宝石的历史日志,并确保一切看起来都很美好?
    • 谢谢,但是我在omniauth.rb中找到了原因。没有 ENV[] 它可以工作。
    猜你喜欢
    • 2011-10-06
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多