Понимание процесса аутентификации Shopify App Bridge 2 и shopify_app (Rails 6)
Поэтому, следуя нескольким руководствам и документам Shopify, я пытаюсь перенести встроенное приложение Shopify из сеансов cookie в JWT с помощью AppBridge 2.
Я использую AppBridge для настройки:
import { getSessionToken } from "@shopify/app-bridge-utils";
window.app = createApp({
apiKey: data.apiKey,
host: data.host,
forceRedirect: true
});
в моем коде FrontEnd JS, в результате которого к окну прикрепляется sessionToken:
window.sessionToken = await getSessionToken(app);
пока здесь все работает нормально, я могу загрузить свое приложение в iframe, и мы живем в счастливом мире.
Однако мои контроллеры Rails(вызываемые через Ajax) отправляют сообщение 401 Unauthorized , поэтому, очевидно, я аутентифицирован на FrontEnd, но мои глупые контроллеры RoR не знают об этом.
Такие контроллеры (как указано в документации Shopify) наследуются от файла authenticated_controller.rb :
class AuthenticatedController < ApplicationController
include ShopifyApp::EnsureAuthenticatedLinks # only JWT
include ShopifyApp::Authenticated
end
Я вижу, что класс ShopifyApp::Authenticate (из драгоценного камня shopify_app ) использует библиотеку:
/lib/shopify_app/controller_concerns/login_protection.rb#L100
с помощью метода:
def jwt_shopify_domain
request.env['jwt.shopify_domain']
end
Итак, код JavaScript в интерфейсе:
window.sessionToken = await getSessionToken(app)
устанавливает значение для 'jwt.shopify_domain', которое будет считаться (считываться) для внутреннего кода? или откуда берется значение jwt.shopify_domain?
Также заметил, что маршрут:
auth_shopify_callback GET /auth/shopify/callback(.:format) shopify_app/callback#callback
все еще существует, как этот маршрут связан с AppBridge? Раньше я использовал этот маршрут для ручной настройки сеанса файлов cookie, следует ли мне его использовать?
В итоге: как код rails на бэкэнде «знает», что AppBridge получил действительный sessionToken во FrontEnd?