【问题标题】:request.env["omniauth.params"] empty during callback phase when using omniauth-stripe-connectrequest.env["omniauth.params"] 使用omniauth-stripe-connect时在回调阶段为空
【发布时间】:2017-08-11 01:33:19
【问题描述】:

我正在尝试使用 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

以及以下在身份验证控制器中

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 集成)。不知道为什么这些值没有按预期返回。

【问题讨论】:

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


    【解决方案1】:

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

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

    我的问题与我对子域的使用有关。我在一个子域上发起请求并将(回调 url)返回到另一个子域。由于会话不是跨子域维护的(至少在我们的配置中),因此参数信息不可用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 2014-07-14
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多