0

因此,在学习了几个 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?

4

0 回答 0