我花了好几个小时试图找到一种方法来为我的一个视图进行基本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并从代码段中复制了代码:
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',
)
尝试所有这些选项后,我不知道该怎么做。这里有什么我想念的吗?!
答案 0 :(得分:1)
这真的不是一个答案。对不起,我必须在这里发布,但是系统已经将我从评论部分中删除了。
我没有看到使用@login_required装饰器的示例有任何问题。这通常是我在Django网站上的方式。这让我相信你有两件事情中的一件:
同样,我不认为您的问题与您的代码有关。请发布您最终确定的问题,以便我(和其他人)可以从中学习。