omniauth-shopify-oauth2 gem的初始化器应该如下所示:
# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :shopify, ENV['SHOPIFY_API_KEY'], ENV['SHOPIFY_SHARED_SECRET']
end
然而,在我们的Rails应用中,有几个不同的品牌提供了相同的功能。在整个应用程序中,请求的request.domain
决定了您使用的是哪个品牌(brand1.example.com
、brand2.example.com
等)。
我们可以轻松地存储品牌特定的凭证,并将用户重定向到品牌特定的授权路径:
https://example.myshopify.com/admin/oauth/authorize?client_id=brand1&scope=read_orders,read_products&redirect_uri=https://brand1.example.com/auth/shopify/callback
但是我不明白如何才能为中间件提供不同的提供者,根据访问的request.domain
进行选择。你知道怎么设置这个吗?
发布于 2018-06-13 22:48:30
Omniauth提供了关于Dynamic Providers的文档,这在这里会很有帮助。类似于:
# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :shopify, setup: lambda do |env|
# Do logic to get correct credentials for request.
# For example, if you store the credentials on a model called Brand,
# and have it keyed on "subdomain":
request = ActionDispatch::Request.new(env)
brand = Brand.find_by(subdomain: request.subdomain)
env['omniauth.strategy'].options.merge!({
client_id: brand.client_id,
client_secret: brand.client_secret
})
# `site` needs to be set. This is part of the shopify provider setup phase, which we are overriding
env['omniauth.strategy'].options[:client_options][:site] = "https://#{ request.GET['shop'] }"
end
end
https://stackoverflow.com/questions/50722041
复制相似问题