如何对Django视图进行基本HTTP身份验证?

如何对Django视图进行基本HTTP身份验证?,django,django-views,django-authentication,Django,Django Views,Django Authentication,我花了好几个小时试图找到一种方法来对我的一个视图进行基本的HTTP身份验证。这些是我尝试过的几种解决方案,但都没有成功。即使没有身份验证,仍将处理该请求。我使用的是Django的1.4.3版。以下是我对Django的看法: @csrf_exempt def facebook(request): if request.user.is_authenticated(): fb_value= ast.literal_eval(request.body)

我花了好几个小时试图找到一种方法来对我的一个视图进行基本的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代码片段中找到的

我制作了一个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\u所需的装饰器:

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')
以下是有关my 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',
)

在尝试了所有这些选择之后,我不知道该怎么办。这里有我遗漏的东西吗

这真的不是一个很好的答案。很抱歉,我不得不把它贴在这里,但是系统已经把我从评论区切断了

我看不出您使用@login\u required decorator的示例有任何问题。这是我在Django网站上的典型做法。这让我相信这里发生了两件事中的一件:

  • 设置文件中存在配置问题
  • 在初始测试期间,您实际上已经验证并创建了会话
    再说一次,我认为你的问题不在于你的代码。请发布您最终确定的问题,以便我(和其他人)从中学习。

    您使用的是什么版本的Django?关于您的环境的详细信息越多越好。@DavidS我正在使用Django 1.4.3您应该在settings.py文件中包含您正在使用的中间件。@DavidS感谢您提供的提示,我现在将其添加到我的问题中。既然您安装了会话中间件,我的直觉是您有一个cookie集。您应该查看中间件会话上的文档,并确保没有这样简单的内容。我尝试了所有的解决方案,并查看了settings.py,看看是否可以进行任何更改。我对你的答案投了赞成票。现在,我将把这个问题留到找到答案之前:)