2

我正在使用 django rest 框架令牌身份验证来对用户进行身份验证。当我使用标头为 react-native-fetch-blob 的请求时

{
    Authorization : token,
    'Content-Type' : 'multipart/form-data',
    'Range' : 'bytes=22976-'
} 

LoginRequiredMixin在我的服务器代码中使用它失败并重定向。如果我删除LoginRequiredMixin它,它就会通过并request.user.is_authenticated()给出True. 如何在用户登录的限制下对用户进行身份验证?请求中是否缺少任何特定的标头?

4

2 回答 2

2

问候。基于@kaushikdr 评论,我编写了这个mixin,它允许会话身份验证和需要登录+令牌身份验证:

https://gist.github.com/jsmedmar/d846eee063fa23148f8a87313dd590a3

from django.contrib.auth import mixins
from rest_framework.authentication import SessionAuthentication
from rest_framework.authentication import TokenAuthentication
from rest_framework import generics

class TokenLoginRequiredMixin(mixins.LoginRequiredMixin):

    """A login required mixin that allows token authentication."""

    def dispatch(self, request, *args, **kwargs):
        """If token was provided, ignore authenticated status."""
        http_auth = request.META.get("HTTP_AUTHORIZATION")

        if http_auth and "Token" in http_auth:
            pass

        elif not request.user.is_authenticated:
            return self.handle_no_permission()

        return super(mixins.LoginRequiredMixin, self).dispatch(
            request, *args, **kwargs)

class ListAPIView(TokenLoginRequiredMixin, generics.ListAPIView):

    """This view suppot both token and session authentication."""

    authentication_classes = [
        SessionAuthentication,
        TokenAuthentication,
        ]
于 2017-08-08T21:21:57.713 回答
2

LoginRequiredMixin是一个纯 Django 的东西,只能使用 Session 身份验证。由于您正在进行令牌身份验证,因此它将不起作用,并且会认为您没有登录,因此会重定向您。

Django REST 框架提供了自己的身份验证和权限系统。您将对后者特别感兴趣的是IsAuthenticated权限检查。

于 2017-03-16T11:31:02.503 回答