2012-10-05 58 views
6

我們是讓用戶像這樣最低權限註冊:設計+ omniauth,Facebook添加權限

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

我們這樣做是爲了提高註冊率(你問轉換越高越少權限)。

但後來當用戶想要分享某些東西時,我們需要publish_stream權限。

有誰知道如何提升fb權限?例如:'電子郵件,offline_access,user_about_me,publish_stream'

我知道用戶必須再次通過oauth對話框..但如何做到這一點?

感謝

+1

你想通了這一點了嗎?問自己同樣的問題... – toxinlabs

回答

4

首先,你需要添加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)鏈接到的位置。第二個設置路由是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

-2

使用只有兩種權限與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" } } } 
+0

不知道你是什麼意思。我想要做的是稍後添加新的權限。 可以說,在某些時候用戶想要做一些需要upload_photo權限的事情。我怎麼能打開一個彈出facebook連接,具體要求那個權利? – Matthias