0

facebook の omniauth を使用して、コールバックで処理するために URL にいくつかの追加パラメーターを渡したいと思います。

これに関する多くのドキュメントを見つけました (公式ドキュメントに加えて、これは、たとえば: Devise + Omniauth - How to pass extra parameters along? )。しかし、誰も私のために働いていませんでした。

使用:

omniauth_authorize_path(:user, :facebook, msg: 'Hello')

この URL を生成します。

/users/auth/facebook?locale=fr

なぜそれが機能しないのか考えていますか?ありがとう。

アップデート:

このパラメーターは、URL でlocale=fr常に a を使用するようにアプリケーションに要求したためです。locale私のapplication_controller.rbは次のメソッドを使用します。

class ApplicationController < ActionController::Base

    protect_from_forgery

    before_filter :set_locale

    def set_locale
        I18n.locale = params[:locale] || I18n.default_locale
    end

    # Always add :locale parameter to URL
    def url_options
        {:locale => I18n.locale}.merge(super)
    end

end

url_optionsメソッドを削除しても問題は解決せず、次の URL が表示されます。

/users/auth/facebook
4

3 に答える 3

0

Facebook認証にランダムな名前のパラメータを渡してコールバックで戻すことはできませんでしたが、問題を回避する1つの方法はパラメータ状態を使用すること/users/auth/facebook?state=frですが、CSRFを防ぐためにデフォルトで状態が使用されることに注意してください(http://en. wikipedia.org/wiki/Cross-site_request_forgery ) したがって、コールバックが以前のリクエストからのものであることを確認するために、状態パラメーターを追加のデータで少し複雑にすることができます

于 2013-09-12T07:44:27.330 に答える
0

つい最近、その問題を自分で解決しました。結果は宝石です: https://github.com/kot-begemot/rails-localization

まだ RubyGems にリリースする必要がありますが、資格情報を忘れてしまいました =(

于 2013-12-26T17:41:58.567 に答える