因此,在学习了几个 Shopify 的教程和文档之后,我尝试使用 AppBridge 2 将 Shopify 的嵌入式应用程序从 cookie 会话迁移到 JWT。
我正在使用 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 gem)使用该库:
/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?