如何在apiview中获取访问令牌

时间:2019-03-21 15:18:13

标签: django django-rest-framework

我想在我的APIView中获得访问令牌。我在Oauth2中使用client_credentials。甚至将self.request.authself.request.user打印为None。我希望在djnago restframework中创建了client_credentials应用程序的用户。

# Employee API
class EmployeeListAPIView(generics.ListAPIView):
    serializer_class = UserSerializer
    # permission_classes = [UserIsAuthenticated]

    def get_queryset(self, *args, **kwargs):
        print('request.user', self.request.auth)
        print('request.user', self.request.user)
        print('Access Token', self.access_token)

        qs = User.objects.exclude(
                Q(userprofile__user_is_deleted = True)|
                Q(userprofile__user_company__company_is_deleted=True)
            ).filter(
                Q(userprofile__user_company =self.request.auth.application.company) &
                Q(userprofile__user_role__id=4)
            )
        return qs

2 个答案:

答案 0 :(得分:2)

如果要访问令牌,可以通过request.META.get('HTTP_AUTHORIZATION')获得。

如果您想要用户或客户,则可以

from django-oauth2-provider.provider.oauth2.models import AccessToken

accesstoken=AccessToken.objects.get(token=request.META.get('HTTP_AUTHORIZATION'))
user=accesstoken.user
client=accesstoken.client

答案 1 :(得分:2)

还不能发表评论,所以我需要回答:) 您确定中间件设置正确吗?

这里是一个例子,也许会有所帮助。 How can I get the current logged in user from a django-oauth-toolkit token?

实际上很奇怪,您无法通过self.request.user获取用户。应该让他回来的。

尝试打印您正在查看的请求对象并查看其中的内容,也许会有所帮助。