簡體   English   中英

Devise + omniauth-facebook添加權限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM