2011-11-25 2 views
8

Ho installato omniauth 1.0. Inoltre ho oauth-0.4.5, oauth2-0.5.1, omniauth-facebook-1.0.0, omniauth-twitter-0.0.6.omniauth OAuthException & OAuth :: Non autorizzato

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 

Inoltre aggiungo 'omniauth' gemme 'omniauth-facebook' 'omniauth-Twitter' a Gemfile

Ci sono due problemi:

  1. Quando vado http://localhost:3000/auth/facebook ottengo { "errore": { "messaggio": "Parametro client_id mancante"., "tipo": "OAuthException" }}

E il link 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 E non c'è client_id !!!

  1. Quando vado a http://localhost:3000/auth/twitter ricevo OAuth :: non autorizzato

401 non autorizzato

Tutte le idee?

+0

avete risolto l'errore facebook? Se lo è, posso risolvere il problema? Ricevo lo stesso messaggio di errore. Può essere risolto se ho aggiunto manualmente il client_id per interrogare i parametri stringa – Vina

+1

@Vina ENV [] lo interrompe. Prova a usare solo "". Per esempio: fornitore: facebook, '167257285348131', 'c8c722f697scb2afcf1600286c6212a9' –

+1

Grazie, funziona! Sembra che anche io debba riavviare il webrick. : D – Vina

risposta

15

Alex D. è corretta in quanto la ENV [] lo spezza. Per creare omniauth.rb in modo che utilizzi differenti chiavi in ​​diversi ambienti appena messo:

provider :twitter, TWITTER_KEY, TWITTER_SECRET 

in omniauth.rb

e poi nei file di configurazione di ambiente (config/ambienti/development.rb, etc.) metti la chiave che vuoi usare per quell'ambiente.

config/ambienti/development.rb:

TWITTER_KEY = 'aaaaaaa' 
TWITTER_SECRET = 'aaaabbbbbb' 

config/ambienti/produzione.RB:

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

Lo prendo aggiungendo questi file al file gitignore perché altrimenti ci sono molte chiavi a disposizione di chiunque da visualizzare nel repository? – Richlewis

+0

@Jeff Steil: è un modo migliore di memorizzare KEY e API_SECRET o l'approccio delle variabili di ambiente? So che è un argomento discutibile, ma visto che al momento sono l'unico sviluppatore, qual è il modo migliore? –

0

Ci sono state rompendo le modifiche apportate in omniauth 1.0 - https://github.com/intridea/omniauth

OmniAuth 1.0 ha diversi cambiamenti che si infrangono a partire dalla versione 0.x. È possibile impostare la dipendenza su ~> 0.3.2 se non si desidera aumentare ulteriormente l'aggiornamento . Vedere lo wiki per ulteriori informazioni.

vorrei cercare di ritornare omniauth a 0.3.2:

gem install omniauth --version '~> 0.3.2' 

o se si sta utilizzando bundler, nella vostra Gemfile:

gem omniauth, '~> 0.3.2' 
+0

Sono tornato a 0.3.2. Sorprendente ho gli stessi problemi. –

+0

Ah mi spiace sentirlo. Ho avuto un problema simile qualche tempo fa, e tornando a 0.3.2 risolto per me. Guarderei i log della cronologia sulle altre gemme rilevanti e mi assicuro che tutto sia di buon gusto? – gef

+3

Grazie, ma ho trovato il motivo in omniauth.rb. Senza ENV [] funziona. –

2

ENV['something']

guarda nel vostro ambiente vars per "qualcosa", in modo che ci si aspetterebbe

something='12345'

così si dovrebbe fare in quel modo

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

verifica con

env 

e aggiornare il config

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

se si utilizza Heroku

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