我正在尝试使用全身份验证条带连接策略来连接用户帐户,以便我可以在购买期间将资金直接转移到他们的帐户。
我在初始值设定项中有以下内容
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"] 也是 nil。
我已经让它在其他情况下工作(facebook oauth集成(。不知道为什么这些值没有按预期返回。
这个问题完全与 oauth 如何设置参数值有关。这是通过存储在会话上的值来管理的。我原以为这些值被转发到身份验证服务(在本例中为 Stripe(并由该服务返回。
相反,它们在调用之前放置在会话中,并在回调阶段附加到 oauth 值。
我的问题与我对子域的使用有关。我在一个子域上发起请求,并将(回调 url(返回到另一个子域。由于会话不是跨子域维护的(至少在我们的配置中是这样(,因此参数信息不可用。
在请求阶段和回调阶段重新设计流程以使用相同的子域解决了问题。