访问request.user时,django-rest-framework中的身份验证循环

时间:2015-01-14 15:32:42

标签: python django django-rest-framework django-1.7

我在django-rest-framework 3.0.3中定义了一个自定义身份验证方案,如下所示:

from django.contrib.auth.models import AnonymousUser
from rest_framework import authentication


class CustomAuthentication(authentication.BaseAuthentication):
    def authenticate(self, request):
        print 'authenticate!', request.user
        return (AnonymousUser(), None)

当我使用CustomAuthentication时,我得到了超过"最大递归深度"错误,这将打印在我的日志中:

authenticate! authenticate! authenticate! authenticate! authenticate! etc.

从我的print语句中删除request.user修复了这个无限循环。在定义自定义身份验证方案时,我不应该使用request.user吗?

1 个答案:

答案 0 :(得分:2)

正如document所暗示的那样:

  

request.user通常返回一个实例   django.contrib.auth.models.User,虽然行为取决于   正在使用的身份验证策略。

     

如果请求未经身份验证,则request.user的默认值为   django.contrib.auth.models.AnonymousUser。

的一个实例

我认为在使用request.user时,它会检查请求是否具有用户对象,并以递归方式继续调用自定义身份验证方法。您需要在函数中返回User对象。