【问题标题】:Tastypie csrftoken not set in incognito modeTastypie csrftoken 未设置为隐身模式
【发布时间】:2013-09-02 19:23:16
【问题描述】:

我使用 ajax 调用对薄的美味饼层进行 CRUD(使用 csrf 令牌)。一切都像一个魅力,直到我在例如运行该网站。 Chrome 隐身模式。我不断收到 CUD 请求的 401。

查看请求 cookie,我发现 sessionid cookie 已设置,但 csrftoken cookie 未设置(如果我在正常模式下运行,则正确设置)。

在我的settings.py 我有:

MIDDLEWARE_CLASSES = (
  'django.middleware.common.CommonMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
 )

有人遇到过这个问题,可以帮我节省一些时间吗?

非常感谢, 于尔根

【问题讨论】:

    标签: csrf tastypie incognito-mode


    【解决方案1】:

    我找到了没有在 Django 的中间件文件csrf.py 中设置 cookie 的原因。 if 下面的代码在隐身模式下启动,防止设置 cookie:

        if not request.META.get("CSRF_COOKIE_USED", False):
            return response
    

    我的解决方法是手动为我的 ModelResources 设置这个值在 sweetpie 的 api.py 文件中:

    class MyModelResource( ModelResource ) :
    
        [..]
    
        def wrap_view(self, view):
             def wrapper(request, *args, **kwargs):
                 request.META["CSRF_COOKIE_USED"] = True
                 wrapped_view = super(MyModelResource, self).wrap_view(view)
                 return wrapped_view(request, *args, **kwargs)
             return wrapper
    

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 2016-10-10
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多