Вот ссылка, которая может помочь: https://github.com/Shopify/omniauth-shopify-oauth2/issues/60
Я переписал ваш скрипт таким образом, который, кажется, реализует то, что вы хотите. Динамически добавьте «scope» из: client_permissions key
Rails.application.config.middleware.use OmniAuth::Builder do
provider :shopify,
setup: lambda { |env|
request = ActionDispatch::Request.new(env)
subdomain = request.subdomain
domain = request.domain
full_domain = subdomain+domain
shopify_client = Rails.cache.fetch("#{full_domain}_shopify_client")
env['omniauth.strategy'].options.merge!(
{
client_id: shopify_client[:client_id],
client_secret: shopify_client[:client_secret],
scope: shopify_client[:client_permissions]
client_options: {
site: "https://#{request.GET['shop']}"
},
}
)
end
Если есть ошибка Scope does not match, it may have been tampered with.
, возможно, вам придется настроить Rails.cache.fetch("#{full_domain}_shopify_client")[:client_permissions]
в сеансе (session['shopify.oauth.scope']
).
strategy = env['omniauth.strategy']
session = strategy.session.with_indifferent_access
env['omniauth.strategy'].options[:scope] = session['shopify.oauth.scope']
Внутри вашей лямбды настройки.
Затем, перед перенаправлением на обратный вызов oauth (например, из контроллера)
subdomain = request.subdomain
domain = request.domain
full_domain = subdomain+domain
shopify_client = Rails.cache.fetch("#{full_domain}_shopify_client")
session['shopify.oauth.scope'] = shopify_client[:client_permissions]