0

使用 facebook 的 omniauth,我想将一些额外的参数传递给 URL,以便在回调中处理它们。

我找到了很多关于这个的文档(除了官方文档,这个,例如:Devise + Omniauth - How to pass extra parameters together?)。但是没有人为我工作。

使用:

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

产生这个网址:

/users/auth/facebook?locale=fr

知道为什么它不起作用吗?谢谢。

更新:

该参数locale=fr是因为我已要求应用程序始终locale在 URL 中使用 a。我的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

2

不完全是很多帮助,但我只是在我自己的代码上尝试了这个,它似乎运行良好:

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

生产

http://localhost:3000/users/auth/facebook?msg=Hello

我想需要注意的一个有趣的事情是第一行也相当于:

user_omniauth_authorize_path(:facebook, msg: "Hello")

请问你用的是什么版本的gem?

我唯一能想到的另一件事可能是您的 url_options 方法正在干扰设计。尝试将您的 set_locale 方法更改为如下所示:

def set_locale
   I18n.locale = params[:locale] || I18n.default_locale
   self.default_url_options[:locale] = I18n.locale 
end
于 2013-09-12T08:07:59.333 回答
0

you could not pass any random named param to the facebook auth and get it back at callback but one way to get around the problem is to use the param state /users/auth/facebook?state=fr but beware that state is by default used to prevent CSRF (http://en.wikipedia.org/wiki/Cross-site_request_forgery) so maybe you could complexify a little your state param with extra data to be sure that the callback is genuinly from your previous request

于 2013-09-12T07:44:27.330 回答
0

最近我自己解决了这个问题。结果是宝石:https ://github.com/kot-begemot/rails-localization

然而必须将其发布到 RubyGems,但忘记了我的凭据 =(

于 2013-12-26T17:41:58.567 回答