【发布时间】:2013-05-24 21:41:14
【问题描述】:
我一直在花费数小时试图找到一种方法来为我的一个视图提供基本 HTTP 身份验证。这些是我尝试过的几种解决方案,但都没有成功。即使没有身份验证,请求仍会被处理。我正在使用 Django 1.4.3 版。这是我的 Django 视图:
@csrf_exempt
def facebook(request):
if request.user.is_authenticated():
fb_value= ast.literal_eval(request.body)
queryset = Poster.objects.all().filter(fb_id__in = fb_value.values())
data = serializers.serialize('json', queryset, fields = ('picture','fb_id',))
return HttpResponse(data, 'application/javascript')
else:
return HttpResponse("This user is not authenticated")
我在没有认证的情况下发送了请求,它仍然返回了结果。这不应该发生。
我尝试的另一个解决方案来自我发现的一个名为 view by view basic authentication decorator 的 Django Snippet
我做了一个 httpauth.py 并从 sn-p 复制代码:
from mydjangoapp.httpauth import *
@csrf_exempt
@logged_in_or_basicauth()
def facebook(request):
fb_value= ast.literal_eval(request.body)
queryset = Poster.objects.all().filter(fb_id__in = fb_value.values())
data = serializers.serialize('json', queryset, fields = ('picture','fb_id',))
return HttpResponse(data, 'application/javascript')
我发送的请求没有经过身份验证,它仍然返回结果。用尽所有选项后,我求助于 Django 自己的 @login_required 装饰器:
from django.contrib.auth.decorators import login_required
@csrf_exempt
@login_required
def facebook(request):
fb_value= ast.literal_eval(request.body)
queryset = Poster.objects.all().filter(fb_id__in = fb_value.values())
data = serializers.serialize('json', queryset, fields = ('picture','fb_id',))
return HttpResponse(data, 'application/javascript')
这里是关于我的 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',
)
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)
在尝试了所有这些选项之后,我不知道该怎么办。我在这里有什么遗漏吗?!
【问题讨论】:
-
你使用的是什么版本的 Django?关于您的环境的详细信息越多越好。
-
@DavidS 我正在使用 Django 1.4.3
-
您应该在 settings.py 文件中包含您正在使用的中间件。
-
@DavidS 感谢您的提示,我现在将其添加到我的问题中。
-
既然你安装了会话中间件,我的直觉是你有一个 cookie 集。您应该查看有关中间件会话的文档,并确保您没有类似的简单内容。 docs.djangoproject.com/en/1.4/topics/http/sessions
标签: django django-views django-authentication