最初setup: true
に、サービスの権限のリストをアップグレードできるように追加する必要があります。
Devise.setup do |config|
config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
:scope => 'email,offline_access,user_about_me',
:setup => true
end
に 2 つのルートを追加し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
最初のルートは、 を使用してユーザーをリンクする必要がある場所user_omniauth_upgrade_path(:facebook)
です。2 番目のセットアップ ルートは、omniauth が内部的に呼び出すコールバックであり、スコープ パラメータを変更するために使用できます。
これらは次のようになり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
setup: true
内部で omniauth 構成を指定するsetup_path
と、デフォルトで呼び出されます。これを使用して、戦略のデフォルトからスコープを変更します。これを に追加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
最後に、ビューに次を追加できます。
<%= link_to "Upgrade Access", user_omniauth_upgrade_path(:facebook) %>
ソース:
http://willschenk.com/setting-up-devise-with-twitter-and-facebook-and-other-omniauth-schemes-without-email-addresses/#passing-dynamic-scopes-to-omniauth