6

ユーザーは、次のような最小限の権限でサインアップできます。

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 ダイアログを通過する必要があることは承知していますが、これを行うにはどうすればよいですか?

ありがとう

4

2 に答える 2

5

最初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

に 2 つのルートを追加し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)です。2 番目のセットアップ ルートは、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

于 2016-02-21T00:40:48.973 に答える
-2

Facebookでのログインには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" } } }
于 2012-10-05T07:27:23.307 に答える