2

我使用 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',
 )

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

非常感谢,于尔根

4

1 回答 1

3

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

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

我的解决方法是手动为我的 ModelResources 在tastepie 的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
于 2013-09-02T11:23:16.750 回答