【问题标题】:shopify_auth multi store session handlingshopify_auth 多商店会话处理
【发布时间】:2016-12-22 19:30:34
【问题描述】:

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

有没有人有任何关于如何处理多商店会话/连接的示例?

到目前为止,我正在考虑使用以下内容修改 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

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

【问题讨论】:

    标签: python django shopify


    【解决方案1】:

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

    1. 请求标头
    2. 网址参数
    3. 推荐人

    很遗憾,由于闭源协议/限制,我无法分享确切的实现,但是我希望这会引导您朝着正确的方向前进。

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

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

    【讨论】:

    • 是的,我之前试图实现类似的东西,但被卡住了。我更喜欢这种方法,因为我认为它对用户来说听起来更无缝。我会再试一次...
    • 我没有机会回过头来实现这个(因为我一直在研究其他功能)。我想知道您是否有时间为我创建这个自定义会话中间件?
    • 我的 Skype 在我的个人资料中,请随时联系
    【解决方案2】:

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

    【讨论】:

    • 如何访问新的请求商店域?
    • 它作为参数存储在请求中的盘子上交给您。
    • 只有当它作为查询字符串参数传递时,我才能将“shop”视为request.GET 参数。但有时它并没有通过。有什么建议吗?
    • 您能否提供一个更具体的示例(特定于我所询问的 Python Shopify API)?我可以在回复中看到x-shopid': 1231245,但看不到与“商店”有关的任何其他内容...
    • 这与 Python、PHP、Ruby 或任何其他脚本语言无关。当您检查您的请求时,Shopify 域名(一个很好的主键,因为它永远不会更改)作为参数传递给您。你用它来决定谁在敲门。如果你没有看到它,那么请求来自哪里?你?如果你,那么一定要添加它。请注意,webhook、运营商运输请求和 App Proxy 调用改为使用标头嵌入。
    猜你喜欢
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2019-01-25
    相关资源
    最近更新 更多