[英]Devise + omniauth-facebook Add permissions
我們讓用戶以最低權限注冊,如下所示:
Devise.setup do |config|
config.omniauth :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
:scope => 'email,offline_access,user_about_me'
end
我們這樣做是為了提高注冊率(您要求轉換率越高的權限越少)。
但是后來當例如用戶希望fb共享某些東西時我們需要publish_stream權限。
有誰知道如何提升fb權限? 舉例來說:'email,offline_access,user_about_me,publish_stream'
我知道用戶必須再次通過oauth對話框..但是如何做到這一點?
謝謝
首先,您需要添加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
在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)
鏈接到的user_omniauth_upgrade_path(:facebook)
。 第二個設置路徑是omniauth將在內部調用的回調,我們可以使用它來更改scope參數。
這些進入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
在omniauth配置中指定setup: true
,默認情況下會調用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
只使用兩個權限登錄Facebook - 1)電子郵件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" } } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.