OmniAuth dynamic client options site within the strategy

依然范特西╮ 提交于 2019-12-11 02:04:16

问题


I have a rails app set up as an OAuth2 provider (using Doorkeeper). The app uses a different subdomain per user account (or an entirely different domain through a cname record)

i.e. 
user1.myrailsapp.com
user2.myrailsapp.com
www.mycustomdomain.com

On the provider side, everything is working as expected.

I also have a second app that is a client making use of the first app's exposed API. I have a version of the client working but only with a hard coded site url in the OmniAuth strategy.

The question is, how can I dynamically set the strategy url on a per request basis.


回答1:


For anyone interested, the solution is in the use of dynamic providers: https://github.com/intridea/omniauth/wiki/Dynamic-Providers

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :mystrategy, ENV["OAUTH_ID"], ENV["OAUTH_SECRET"],
    :setup => lambda{|env| 
      env['omniauth.strategy'].options[:client_options].site = env['rack.session']['oauth_site']
    }
end



回答2:


One option is don't do it that way.

I have a similar app and ran into the same issue. However after thinking about it for a moment I realised that I didn't want to send them to a strategy provider URL on the user account's subdomain because the request wasn't yet fully authenticated (it hasn't been processed by the rails app yet).

Also for the first time a user logs in the user account subdomain hadn't yet been set up, so it would have been impossible to route there.

So instead, I have the strategy callback URL set to the main website. After the signin request is processed, session set up and everything, then I redirect the client onto their user subdomain. Takes out a whole load of pain.



来源:https://stackoverflow.com/questions/11140266/omniauth-dynamic-client-options-site-within-the-strategy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!