使用omniauth-stripe-connect时,request.env [" omniauth.params"]在回调阶段为空

时间:2017-03-19 21:10:19

标签: ruby-on-rails omniauth stripe-connect

我正在尝试使用omniauth-stripe-connect策略来连接用户帐户,这样我就可以在购买时将资金直接转移到他们的帐户。

我在初始化程序中有以下内容

Rails.application.config.middleware.use OmniAuth::Builder do
 provider :stripe_connect, APP_CONFIG[:stripe_connect_client_id],
                        APP_CONFIG[:stripe_secret_key],
                        scope: 'read_write',
                        stripe_landing: 'register'

 on_failure  { |env| AuthController.action(:failure).call(env) }
end

以及auth控制器中的以下内容

def stripe_connect
  result = request.env["omniauth.auth"]
  pass_through_params = request.env["omniauth.params"]
...
  # do some stuff
end

我用

启动身份验证过程
http://test.lvh.me:3000/auth/stripe_connect?user_id=980190962&user_subdomain=test

在回调期间,request.env [" omniauth.auth"]具有正确的值,但request.env [" omniauth.params"]始终为{}。 request.env [" omniauth.origin"]也是零。

我已经让它在其他情况下工作(facebook oauth整合)。不知道为什么这些价值不会按预期返回。

1 个答案:

答案 0 :(得分:0)

该问题与oauth如何设置参数值完全相关。这是通过存储在会话中的值来管理的。我原以为这些值正被转发到身份验证服务(在本例中为Stripe)并由该服务返回。

相反,它们在调用之前被置于会话中,并在回调阶段附加到oauth值。

我的问题与我使用子域名有关。我在一个子域上启动请求并返回(回调URL)到另一个子域。由于会话不跨子域维护(至少在我们的配置中),因此params信息不可用。

在请求阶段重做流程以使用相同的子域,回调阶段解决了问题。