सबसे पहले आप 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
आप अभी तक बाहर इस लगा है? खुद को एक ही प्रश्न पूछना ... – toxinlabs