2015-11-26 93 views
0

我试图让当前的用户模型中的串行self.context [“请求”]。用户总是返回AnonymousUser

self.context['request'].user 

但它总是返回AnonymousUser。 这里是串行代码片断

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) 

我尝试添加的会话和BasicAuthentication但它总是返回AnonymousUser。请帮助我。

+0

你能证明你的观点:

你可以通过改变你def get_isvoted(self,obj):方法类似解决这个问题? –

回答

0

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

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

我也获得匿名认证的用户。我使用oAuth进行令牌认证。我尝试了上面的代码片段。它仍然返回anonymousUser – ashok