0

私はomniauth-facebookrails3.2とdevise2.0でgemを使用しています。

私は英語とスペイン語の2つの言語のウェブサイトを持っています。

http:// localhost:3000 / en http:// localhost:3000 / es

omn​​iauth_callbacks_controller.rbではリダイレクトがに移動するため、gemは英語のユーザーには問題なく機能しますhttp://localhost:3000/en

これはFacebook用の私のomniauth_callbacks_controller.rbです:

def facebook
    @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
    if @user.persisted?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
      sign_in_and_redirect @user, :event => :authentication
    else
      session["devise.facebook_data"] = request.env["omniauth.auth"]
      redirect_to new_user_registration_url
    end
  end

次に、問題はスペイン語のユーザーにあります。http://localhost:3000/esコールバックからのリダイレクトを使用する場合は、http://localhost:3000/en

コールバックからのリダイレクトを、そのユーザーを使用している特定の言語に移動させたい。

どうすればいいですか?

ありがとうございました!

4

2 に答える 2

4

同様の問題があり、コールバックURLを変更する方法が見つかりませんでしたが、コールバックが発生したときにメソッドでロケールを設定できました。

元のURL(元の正しいロケールを持つ)はに保存されていますrequest.env['omniauth.origin']

したがって、facebookメソッドでは、元のURLからロケールを選択します。これは、ドメイン部分の後の2文字と同じようになります。

メソッドの最初に追加しましたfacebook

I18n.locale = exctract_locale_from_url(request.env['omniauth.origin']) if request.env['omniauth.origin']

exctract_locale_from_url恐ろしい正規表現はどこにありますか:)

def exctract_locale_from_url(url)
  url[/^([^\/]*\/\/)?[^\/]+\/(\w{2})(\/.*)?/,2]
end
于 2012-05-19T02:06:35.570 に答える
0

omn​​iauth構成をyamlファイルに抽出し、コールバックリンクの最後に「#{i18n.locale}」を挿入する必要があると思います。

于 2012-04-19T17:00:11.240 に答える