【问题标题】:self.context['request '].user always returns AnonymousUserself.context['request '].user 总是返回 AnonymousUser
【发布时间】:2016-02-28 23:27:18
【问题描述】:

我正在尝试在模型序列化程序中获取当前用户

self.context['request'].user

但它总是返回 AnonymousUser。 这是序列化代码sn-p

class QuestionBlockDetailSerializer(serializers.ModelSerializer):
    isvoted = serializers.SerializerMethodField(read_only=True)

    def get_isvoted(self,obj):
        user = self.context['request'].user
        print self.context['request'].user
        ...

以下是权限和 AuthBackends 的设置

AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'social.backends.google.GoogleOAuth2',
'social.backends.facebook.FacebookOAuth2',)

 'DEFAULT_AUTHENTICATION_CLASSES': (
    'oauth2_provider.ext.rest_framework.OAuth2Authentication',
    'rest_framework_social_oauth2.authentication.SocialAuthentication',
    'rest_framework.authentication.TokenAuthentication',

),

查看:

class QuestionBlockDetailAPI(generics.RetrieveAPIView, mixins.UpdateModelMixin, mixins.DestroyModelMixin):
   permission_classes =[IsAuthenticatedOrReadOnly]
   serializer_class = QuestionBlockDetailSerializer
   queryset= Question_Block.objects.all()
   lookup_field = 'q_slug'

   def delete(self, request, *args, **kwargs):
    return self.destroy(request,*args, **kwargs)

   def put(self, request, *args, **kwargs):
    return self.update(request,*args,**kwargs)

我尝试添加 Session 和 BasicAuthentication,但它总是返回 AnonymousUser。请帮我解决这个问题。

【问题讨论】:

  • 可以发表一下看法吗?

标签: django django-rest-framework django-authentication


【解决方案1】:

您在QuestionBlockDetailAPI 视图中使用IsAuthenticatedOrReadOnly 权限类。因此,未经身份验证的用户可以读取您的 api。所以self.context['request'].user是AnonymousUser,当未经授权的用户访问你的api时。

您可以通过更改 def get_isvoted(self,obj): 方法来解决此问题,例如:

def get_isvoted(self,obj):
    if self.context['request'].user.is_authenticated():
        return self.context['request'].user.isvoted
    else:
        return False

【讨论】:

  • 我也为经过身份验证的用户匿名。我正在使用带有令牌身份验证的 oAuth。我试过上面的sn-p。它仍然返回anonymousUser
【解决方案2】:

只需在条件下使用 user.is_authenticated

if self.context['request'].user.is_authenticated:
    return true

【讨论】:

    猜你喜欢
    • 2017-11-22
    • 2019-05-24
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多