2011-11-25 115 views
8

我已经安装了omniauth 1.0。我也有oauth-0.4.5,oauth2-0.5.1,omniauth-facebook-1.0.0,omniauth-twitter-0.0.6。omniauth OAuthException&OAuth ::未授权

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' 'omniauth Facebook的' “omniauth,Twitter的宝石的Gemfile

有两个问题:

  1. 当我去http://localhost:3000/auth/facebook我得到“ { ”error“:{ ”message“:”Missing client_id parameter。“, ”type“:”OAuthException“ } }

和连杆graph.facebook.com/oauth/authorize?response_type=code & CLIENT_ID = & REDIRECT_URI = HTTP%3A%2F%2Flocalhost%3A3000%2Fauth%2Ffacebook%2Fcallback &解析=查询& scope = email%2Coffline_access%2Cread_stream & display = popup 而且没有client_id !!!

  • 当我去http://localhost:3000/auth/twitter我得到的OAuth ::未经授权
  • 401未授权

    任何想法?

    +0

    你解决facebook的错误更新你的配置

    provider :facebook, ENV['AUTH_FB_KEY'], ENV['AUTH_FB_SECRET'] 

    ?如果是这样,我可以解决这个问题吗?我收到相同的错误消息。它可以解决,如果我手动添加client_id查询字符串参数 – Vina

    +1

    @Vina ENV []打破它。尝试仅使用“”。例如:提供者:Facebook,'167257285348131','c8c722f697scb2afcf1600286c6212a9' –

    +1

    谢谢,它的工作!看来我还需要重启webrick。 :D – Vina

    回答

    15

    亚历克斯D.是正确的ENV []将其分开。要创建omniauth.rb,以便它使用在不同的环境不同的键只是把:

    provider :twitter, TWITTER_KEY, TWITTER_SECRET 
    

    在omniauth.rb

    ,然后在您的环境配置文件(配置/环境/ development.rb等。 )把你想要用于该环境的密钥。

    配置/环境/ development.rb:

    TWITTER_KEY = 'aaaaaaa' 
    TWITTER_SECRET = 'aaaabbbbbb' 
    

    配置/环境/生产。RB:

    TWITTER_KEY = 'ccccccc' 
    TWITTER_SECRET = 'ccccdddddd' 
    
    +0

    我把它添加到你的gitignore文件这些文件,否则有很多钥匙可供任何人查看您的回购? – Richlewis

    +0

    @Jeff Steil:这是存储KEY和API_SECRET还是环境变量方法的更好方式?我知道这是一个有争议的话题,但由于我目前是唯一的开发者,哪一个更好? –

    0

    已经有打破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

    我回到了0.3.2。令人惊讶我有同样的问题。 –

    +0

    很遗憾听到这个消息。我有一个类似的问题,回到0.3.2为我解决了它。我会查看其他相关宝石上的历史记录,并确保一切看起来很甜蜜? – gef

    +3

    谢谢,但我在omniauth.rb中找到了原因。没有ENV []它的作品。 –

    2

    ENV['something']

    看你的环境瓦尔的 “东西”,所以它会期望

    something='12345'

    所以你应该那样做

    export AUTH_FB_KEY='....' 
    export AUTH_FB_SECRET='...' 
    

    查询

    env 
    

    ,如果您使用Heroku的

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