我在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
吗?
答案 0 :(得分:2)
正如document所暗示的那样:
request.user通常返回一个实例 django.contrib.auth.models.User,虽然行为取决于 正在使用的身份验证策略。
如果请求未经身份验证,则request.user的默认值为 django.contrib.auth.models.AnonymousUser。
的一个实例
我认为在使用request.user时,它会检查请求是否具有用户对象,并以递归方式继续调用自定义身份验证方法。您需要在函数中返回User对象。