代码之家  ›  专栏  ›  技术社区  ›  aarkerio

了解Shopify App Bridge 2和Shopify_App(Rails 6)验证过程

  •  0
  • aarkerio  · 技术社区  · 5 年前

    因此,在阅读了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的?

    0 回复  |  直到 5 年前
    推荐文章