2012-11-23 10 views
12

Il README omniauth-facebook menziona come configurarlo in un inizializzatore e come impostare opzioni come scope solo per richiesta. Mi chiedo se sia possibile impostare l'ID app e il segreto dell'app per ogni richiesta.Usa omniauth-facebook quando l'ID app e il segreto dell'app sono diversi per ogni richiesta?

+0

Mi chiedo il motivo per cui desideri impostare l'ID app e il segreto dell'app per richiesta. C'è solo una chiave per app. –

+2

Cosa succede se il mio sito deve supportare più di una app di Facebook? Pensa SaaS. – powerboy

risposta

17

si può fare questo:

Sul omniauth.rb, fare questo:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook,:setup => true 
end 

Poi sul controller voi è necessario definire quanto segue:

def setup 
request.env['omniauth.strategy'].options[:client_id] = @site.facebook_key 
request.env['omniauth.strategy'].options[:client_secret] = @site.facebook_secret 
render :text => "Setup complete.", :status => 404 
end 

Ovviamente devi aggiungere i percorsi associati, sul tuo route.rb.

#Facebook Omniauth routes 
    match '/auth/facebook/callback' => 'session#authorize_callback' 
    match '/auth/facebook/setup' => 'session#setup' 

Buona fortuna

saluti. Ivan.

+0

Quindi fa un'altra richiesta a '/ auth/facebook/setup' per ogni processo di autenticazione? E perché questo ': status => 404'? – powerboy

+0

OK, che ': status => 404' funziona magicamente! – powerboy

+0

E come configurare 'OmniAuth.config.full_host'? – Rodrigo

1

Se si utilizza escogitare si può fare questo

config.omniauth :facebook, :setup => lambda{ 
     current_app_secret = // Get current domain 
     current_app_key = // Get config 
     env['omniauth.strategy'].options[:client_id] = current_app_secret 
     env['omniauth.strategy'].options[:client_secret] = current_app_key 
    } 
+0

Dove si trova questo codice? Un inizializzatore? Cosa succede se 'current_app_secret' deve essere recuperato dal database? Sembra brutto avere il codice ActiveRecord in un inizializzatore anche se funziona. – powerboy

+0

Penso che dovresti essere in grado di sovrascriverli anche nel controller dell'applicazione. Puoi scrivere un before_filter in application_controller. Fammi sapere cosa succede. –

+0

Grazie! Ma in realtà non sto usando idea. Il mio sito non ha bisogno di alcuna funzione fornita da Idea. – powerboy

5

Io uso devise (seguito questo railscast: http://railscasts.com/episodes/235-devise-and-omniauth-revised), ma mi ci è voluto un po 'per capire come implementare la soluzione di Ivangrx. Si è rivelato abbastanza facile. Ecco il mio codice:

# /config/initializers/devise.rb 
config.omniauth :facebook, setup: true 

# routes.rb 
devise_scope :user do 
    #where omniauth_callback is the controller I made when following the Railscast 
    get "users/auth/facebook/setup" => "omniauth_callbacks#setup" 
end 

# omniauth_callbacks_controller.rb 
def setup 
    request.env['omniauth.strategy'].options[:client_id] = @site.facebook_id 
    request.env['omniauth.strategy'].options[:client_secret] = @site.facebook_key 
    render :text => "Setup complete.", :status => 404 
end 

Grazie per l'aiuto su questo!

+0

È possibile utilizzare la stessa funzione di impostazione per gestire più strategie (ad esempio: 'facebook' e' google_oauth2'). – Jacob

Problemi correlati