Python shopify_验证多存储会话处理

Python shopify_验证多存储会话处理,python,django,shopify,Python,Django,Shopify,我正在使用Django和shopify_auth包来连接shopify 有人举过如何处理多商店会话/连接的例子吗 到目前为止,我正在考虑用以下内容修改shopify_auth的@login\u required装饰器,但我不确定是否会遗漏任何内容: 在shopify_auth/decortors.py中: def login_required(f, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None): @wraps(f)

我正在使用Django和shopify_auth包来连接shopify

有人举过如何处理多商店会话/连接的例子吗

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

在shopify_auth/decortors.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模块中,他们的是一个

这暗示着


任何方向正确的帮助都将不胜感激。

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

我通过创建一个定制的修改的
SessionMiddleware
解决了我所使用的应用程序中的问题,该软件在每个商店创建和处理单独的会话cookies,并通过将请求关联到各自的商店(按以下优先顺序):

  • 请求头
  • URL参数
  • 推荐人
  • 不幸的是,由于封闭源代码协议/限制,我无法共享确切的实现,但是我希望这能引导您朝着正确的方向前进

    确保您仍然包括其他安全中间件(
    CsrfViewMiddleware
    AuthenticationMiddleware
    SessionAuthenticationMiddleware
    SecurityMiddleware
    ),这样用户就不会欺骗您的系统。


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

    我如何访问新的requests shop域?它作为参数shop在请求中的一个盘片上交给您。我可以将“shop”视为
    请求。只有当它作为查询字符串参数传递时,才能获取
    参数。但有时它并没有通过。有什么建议吗?你能提供一个更具体的例子(针对我所问的Python Shopify API)?我可以在我的回答中看到
    x-shopid:1231245
    ,但看不到与“shop”有关的任何其他内容……这与Python、PHP、Ruby或任何其他脚本语言无关。当你检查你的请求时,Shopify域名(一个很好的主键,因为它永远不会改变)会作为一个参数交给你。你用它来决定谁在敲门。如果您没有看到,那么请求来自哪里?你呢?如果需要,请确保添加它。请注意,Webhook、carrier shipping请求和应用程序代理调用都使用头来嵌入它。是的,我以前尝试过实现类似的东西,但后来被卡住了。我更喜欢这种方法,因为我认为它对用户来说听起来更无缝。我会再试一次……我还没有机会回过头来实现它(因为我一直在开发其他功能)。我想知道你是否有时间承担一项小工作,为我创建这个自定义会话中间件?我的Skype在我的个人资料中,请随时与我联系