2

我一直在花费数小时试图找到一种方法来为我的一个观点提供基本的 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',
)

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

4

1 回答 1

1

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

我没有看到您使用 @login_required 装饰器的示例有任何问题。这通常是我在 Django 网站上的做法。这让我相信你在这里发生了两件事中的一件:

  1. 您的设置文件中存在配置问题
  2. 在初始测试期间,您实际上已经验证并创建了一个会话。

同样,我认为您的问题不在于您的代码。请发布您最终确定的问题,以便我(和其他人)可以从中学习。

于 2013-05-29T15:32:28.687 回答