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
haben Sie dies noch herausgefunden? Frage mich selbst die gleiche Frage ... – toxinlabs