令牌认证-Django Rest框架

时间:2020-04-02 19:13:57

标签: python django-rest-framework http-token-authentication

如果用户存在于我的数据库中,我不知道如何返回令牌。 我有带有登录名和密码字段的用户模型,并且已经从dajngo管理站点创建了一些用户。在Urls中,我注册了子弹:

 path('api-token/', AuthToken, name = 'api-token')

Auth令牌类看起来像这样(这是其余框架文档的示例)。

class AuthToken(ObtainAuthToken):

def post(self, request, *args, **kwargs):
    serializer = self.serializer_class(data=request.data,
                                       context={'request': request})
    serializer.is_valid(raise_exception=True)
    user = serializer.validated_data['user']
    token, created = Token.objects.get_or_create(user=user)
    return Response({
        'token': token.key,
    })

我想检查用户是否存在于mu sql-lite数据库中,如果存在,请返回令牌。不幸的是,我不懂这段代码。有人可以解释一下我在做什么,以及如何更改它以满足我的要求。

另一个问题是我拥有“用户”视图,该视图从数据库中返回用户

class UserView(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

以这种方式要求

router = routers.DefaultRouter()
router.register('users', views.UserView)

urlpatterns = [
    path('',include(router.urls)),
]

这行得通吗?我不确定,因为无法检查是否有人通过令牌以及令牌是否正确

1 个答案:

答案 0 :(得分:0)

如果您不使用自定义令牌身份验证,则应使用内置身份验证。

https://www.django-rest-framework.org/api-guide/authentication/#by-exposing-an-api-endpoint

只需使用DRF提供的视图

from rest_framework.authtoken import views
urlpatterns += [
    url(r'^api-token-auth/', views.obtain_auth_token)
]

关于UserView的授权,请参见:https://www.django-rest-framework.org/api-guide/authentication/#setting-the-authentication-scheme

您可以添加

permission_classes = [IsAuthenticated]

它仅允许经过身份验证的用户使用该端点