如何为Django视图提供基本HTTP身份验证?

时间:2013-05-29 14:49:28

标签: 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)
                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',
)

尝试所有这些选项后,我不知道该怎么做。这里有什么我想念的吗?!

1 个答案:

答案 0 :(得分:1)

这真的不是一个答案。对不起,我必须在这里发布,但是系统已经将我从评论部分中删除了。

我没有看到使用@login_required装饰器的示例有任何问题。这通常是我在Django网站上的方式。这让我相信你有两件事情中的一件:

  1. 您的设置文件中存在配置问题
  2. 在初始测试期间,您实际上已经过身份验证并创建了一个会话。
  3. 同样,我不认为您的问题与您的代码有关。请发布您最终确定的问题,以便我(和其他人)可以从中学习。