我一直在花费数小时试图找到一种方法来为我的一个观点提供基本的 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")
我在没有身份验证的情况下发送了请求,它仍然返回了结果。这不应该发生。
我尝试的另一个解决方案是来自我发现调用的 Django Snippet,逐个查看基本身份验证装饰器
我制作了一个 httpauth.py 并从片段中复制了代码:
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',
)
在尝试了所有这些选项之后,我不知道该怎么办。有什么我在这里想念的吗?!