2012-10-05 14 views
6

हम उपयोगकर्ताओं को इस तरह कम से कम अनुमतियों के साथ साइन अप दे रहे हैं:वसीयत + omniauth-फेसबुक अनुमतियां जोड़ें

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

हम यह साइन अप दर (कम अनुमतियाँ आप उच्च रूपांतरण के लिए पूछना) बढ़ाने के लिए करते हैं।

लेकिन बाद में जब उदाहरण के लिए उपयोगकर्ता कुछ साझा करना चाहता है तो हमें publ_stream अनुमति की आवश्यकता है।

क्या कोई जानता है कि एफबी अनुमतियों को कैसे बढ़ाया जाए? उदाहरण के लिए: 'ईमेल, ऑफ़लाइन_एसीएएस, user_about_me, publ_stream'

मुझे पता है कि उपयोगकर्ता को फिर से ओथ संवाद से गुजरना है..लेकिन यह कैसे करें?

धन्यवाद

+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_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

फेसबुक के साथ प्रवेश के लिए केवल दो अनुमति उपयोग - 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 अनुमति की आवश्यकता है। मैं फेसबुक कनेक्ट के साथ एक पॉपअप कैसे खोल सकता हूं जो विशेष रूप से उस अधिकार के लिए पूछता है? – Matthias

संबंधित मुद्दे