3

Facebookに対してRailsアプリを認証するためにdevise/omniauthを使用しています。をカスタムのものに変更しようとしていcallback_pathますが、何に設定しても、omniauth.authリクエスト変数はnilとして返されます。たとえば、ここでは、を設定callback_pathしない場合の正確な値に設定しています。

Devise.setup do |config |    
  require "omniauth-facebook"
  config.omniauth :facebook, 
    ENV['FACEBOOK_APP_ID'], 
    ENV['FACEBOOK_APP_SECRET'], 
    scope: "email",
    :setup => lambda { |env| 
       env['omniauth.strategy'].options[:callback_path] = "user/auth/facebook/callback"
    }
end

を設定しない:callback_pathと、認証が機能し、omniauth.authリクエスト変数にデータが返されます。ただし、コールバックでの属性の受け渡しをサポートする必要があるため、オーバーライドする必要があります。

Omniauth :: Strategyコードを調べて、何が問題になっているのかを確認しましたが、何が問題になっているのか完全には理解できません。

私の質問:

  • なぜこれが機能しないのですか?
  • 問題を解決するためのより良い方法はありますか?
4

1 に答える 1

2

param は、stateデータを渡すために使用されることは想定されていません (実際、考えてみてください。データをサードパーティに任せているのです!)。そのパラメーターは、CSRF 攻撃を軽減するためにのみ使用されます。

したがって、次のように、好きなパラメーターをリンクに渡す必要があります。

link_to user_omniauth_authorize_path(:facebook, :some_key => 'some_data')

Omniauth は自動的にそのデータをセッションに追加し、コールバックでそのデータをセッションから削除して、次のようにアクセスできるようにします。

request.env['omniauth.params']['some_key']
于 2013-02-05T20:00:18.047 に答える