request.user 可以为 False 而 request.user.is_authenticated 可以为 True 吗?

Can request.user be False while request.user.is_authenticated is True?

Django Rest Framework 的一个片段:

class IsAuthenticated(BasePermission):
    def has_permission(self, request, view):
        return request.user and is_authenticated(request.user)

def is_authenticated(user):
    if django.VERSION < (1, 10):
        return user.is_authenticated()
    return user.is_authenticated

是否存在我自己的代码会 return 出乎意料或与上述结果不同的实际相关案例?

class IsAuthenticated(BasePermission):
    def has_permission(self, request, view):
        return request.user.is_authenticated

如果未定义 request.user,您的将出错。换句话说,如果用户未被识别,那么还没有被添加到请求对象中。

如果您对向后兼容性不感兴趣,我想您可以这样做:

return request.user and request.user.is_authenticated