Search code examples
ruby-on-railsomniauthstripe-connect

request.env["omniauth.params"] empty during callback phase when using omniauth-stripe-connect


I am attempting to use the omniauth-stripe-connect strategy to connect user accounts so i can transfer funds directly to their accounts during a purchase.

I have the following in an initializer

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

and the following in an auth controller

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

and I initiate the authentication process with

http://test.lvh.me:3000/auth/stripe_connect?user_id=980190962&user_subdomain=test

During the callback request.env["omniauth.auth"] has correct values, but request.env["omniauth.params"] is always {}. request.env["omniauth.origin"] is also nil.

I have gotten this to work in other situations (facebook oauth integration). At a loss as to why those values are not returned as expected.


Solution

  • The issue has entirely to do with how oauth sets the param values. This is managed through values stored on session. I had thought the values were being forwarded to the authenticating service (in this case Stripe) and returned by that service.

    Instead, they get placed in session prior to the call, and appended to the oauth values during the callback phase.

    My issue was related to my use of subdomains. I was initiating the request on one subdomain and returning (callback url) to a different subdomain. Since sessions aren't maintain across subdomains (at least with our configuration), the params information was not available.

    Reworking the process to use the same subdomain during the request phase and the callbacks phase solved the problem.