2011-11-25 113 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='....'