shopify_auth 多商店会话处理

shopify_auth multi store session handling

我正在使用带有 shopify_auth 包的 Django 来连接 Shopify。

有没有人有任何关于如何处理多商店的例子sessions/connections?

到目前为止,我正在考虑使用以下内容修改 shopify_auth 的 @login_required 装饰器,但不确定我是否会遗漏任何内容:

在shopify_auth/decortaors.py:

def login_required(f, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):

    @wraps(f)
    def wrapper(request, *args, **kwargs):
        if request.user.is_authenticated():

            # Extract the Shopify-specific authentication parameters from the current request.
            new_request_d = [ ... get request.GET params ('shop', etc.) ... ]

            # Compare current active request.user with new reqeust.GET's 'shop'
            if request.user != new_request_d['shop']:
                [ ...  do something to change session to the other shop ...]
                [ ... redirect as necessary .... ]

            return f(request, *args, **kwargs)

在 shopify_auth 模块中,它们是 unresolved issue about this

提示using the ruby implementation

如能提供正确方向的帮助,我们将不胜感激。

来自 Shopify 的每个请求都带有商店域。您的当前会话设置为商店域。比较两者。如果它们不同,请清除旧会话,并使用不同的传入商店域授权一个新会话。似乎对我来说很好用。

我已经通过创建自定义修改 SessionMiddleware 解决了我工作的应用程序中的问题,该自定义修改 SessionMiddleware 为每个商店创建和处理单独的 session cookie,并通过 (按照以下优先顺序):

  1. 请求headers
  2. URL 参数
  3. 推荐人

很遗憾,由于 closed-source agreements/restrictions,我无法分享确切的实现,但我希望这能引导您朝着正确的方向前进。

确保您仍然包括其他安全中间件(CsrfViewMiddlewareAuthenticationMiddlewareSessionAuthenticationMiddlewareSecurityMiddleware) 这样用户就无法欺骗您的系统。

这样做而不是注销用户的好处是,如果您通过 AJAX 加载任何内容,在不同应用程序安装的选项卡之间来回切换将始终有效,并且您不会担心实施奇怪的重定向逻辑来处理这些错误。