首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在运行时切换omniauth-shopify-oauth2 gem的提供者?

在运行时切换omniauth-shopify-oauth2 gem的提供者?
EN

Stack Overflow用户
提问于 2018-06-06 21:42:52
回答 1查看 383关注 0票数 1

omniauth-shopify-oauth2 gem的初始化器应该如下所示:

代码语言:javascript
复制
# 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.combrand2.example.com等)。

我们可以轻松地存储品牌特定的凭证,并将用户重定向到品牌特定的授权路径:

代码语言:javascript
复制
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进行选择。你知道怎么设置这个吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-13 22:48:30

Omniauth提供了关于Dynamic Providers的文档,这在这里会很有帮助。类似于:

代码语言:javascript
复制
# 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50722041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档