2012-10-05 13 views
6

wir die Benutzer mit minimalen Berechtigungen wie diese Anmeldung werden zu lassen:Devise + omniauth-Facebook Berechtigungen

Devise.setup do |config| 
    config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], 
       :scope => 'email,offline_access,user_about_me' 
end 

Wir tun dies Anmelderate (die weniger Berechtigungen, die Sie für die höher der Umsatz fragen) zu erhöhen.

Aber später, wenn zum Beispiel der Benutzer fb freigeben möchte, benötigen wir die Berechtigung publish_stream.

Kann jemand die FB-Berechtigungen erhöhen? zum Beispiel: 'email, offline_access, user_about_me, publish_stream'

Ich bin mir bewusst, dass der Benutzer den OAUTH-Dialog erneut durchlaufen muss ... aber wie geht das?

dank

+1

haben Sie dies noch herausgefunden? Frage mich selbst die gleiche Frage ... – toxinlabs

Antwort

4

Zuerst müssen Sie setup: true hinzufügen zu können, die Liste der Berechtigungen des Dienstes aktualisieren:

Devise.setup do |config| 
    config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'], 
        :scope => 'email,offline_access,user_about_me', 
        :setup => true 
end 

Fügen Sie zwei Routen in routes.rb:

devise_scope :user do 
    get '/users/auth/:provider/upgrade' => 'omniauth_callbacks#upgrade', as: :user_omniauth_upgrade 
    get '/users/auth/:provider/setup', :to => 'omniauth_callbacks#setup' 
end 

Die erste Route ist, wo der Benutzer mit user_omniauth_upgrade_path(:facebook) verbunden werden sollte. Die zweite Setup-Route ist der Callback, den omniauth intern aufrufen wird und mit dem wir den Scope-Parameter ändern können.

Diese gehen in omniauth_callbacks_controller.rb:

def upgrade 
    scope = nil 

    if params[:provider] == "facebook" 
    scope = 'email,offline_access,user_about_me,publish_stream' 
    end 

    redirect_to user_omniauth_authorize_path(params[:provider]), flash: {scope: scope} 
end 

Wenn Sie setup: true innerhalb der omniauth Konfiguration angeben setup_path standardmäßig aufgerufen wird. Wir werden dies verwenden, um den Bereich von dem Standard in der Strategie zu ändern. Fügen Sie diese auf omniauth_callbacks_controller.rb:

def setup 
    request.env['omniauth.strategy'].options['scope'] = flash[:scope] || request.env['omniauth.strategy'].options['scope'] 
    render :text => "Setup complete.", :status => 404 
end 

schließlich in Ihre Ansichten, die Sie hinzufügen können:

<%= link_to "Upgrade Access", user_omniauth_upgrade_path(:facebook) %> 

Quelle: http://willschenk.com/setting-up-devise-with-twitter-and-facebook-and-other-omniauth-schemes-without-email-addresses/#passing-dynamic-scopes-to-omniauth

-2

Verwendung nur zwei mit facebook Login-Berechtigung - 1) E-Mail 2) publish_stream

config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],{:scope => 'email, publish_stream', :client_options => { :ssl => { :ca_file => "#{Rails.root}/config/ca-bundle.crt" } } } 
+0

Nicht sicher, was Sie damit meinen. Ich möchte später neue Berechtigungen hinzufügen. Sagen wir mal, der Benutzer möchte etwas tun, das die Berechtigung upload_photo erfordert. Wie kann ich ein Popup mit facebook connect öffnen, das genau danach fragt? – Matthias