因此,在阅读了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
});
在我的FrontEndJS代码上,这导致了附加到窗口的sessionToken:
window.sessionToken = await getSessionToken(app);
在这里一切正常之前,我可以在iframe中加载我的应用程序,我们生活在一个幸福的世界里。
然而,我的Rails控制器(通过Ajax调用)正在发送
401未经授权
消息,所以很明显,我在前端进行了身份验证,但我愚蠢的RoR控制器并没有意识到这一点。
此类控制器(如Shopify的文档所示)继承自
authenticated_controller.rb
文件
class AuthenticatedController < ApplicationController
include ShopifyApp::EnsureAuthenticatedLinks # only JWT
include ShopifyApp::Authenticated
end
我看到了课堂
ShopifyApp::身份验证
(来自
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的?