【问题标题】:Token auth - django rest framework令牌认证 - django rest 框架
【发布时间】:2023-03-29 04:52:01
【问题描述】:

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

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

Auth 令牌类看起来像这样(这是来自 rest-framework 文档的示例)。

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)),
]

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

【问题讨论】:

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


    【解决方案1】:

    如果你不使用自定义令牌认证,那么你应该使用内置认证。

    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]
    

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

    【讨论】:

    • 我认为我不能使用内置视图,因为我有自己的用户模型。我必须自己检查用户是否存在于数据库中,然后提供一个令牌作为响应
    • 该视图也适用于自定义用户模型。只要确保你更新了你的设置AUTH_USER_MODEL
    • 我不明白。我已将 permission_classes = [IsAuthenticated] 添加到我的视图中,但它不起作用。你知道我在哪里可以找到基于我的用户模型的身份验证示例吗?
    猜你喜欢
    • 2013-01-28
    • 2021-08-03
    • 2016-08-12
    • 2015-08-24
    • 2014-12-24
    • 1970-01-01
    • 2015-03-25
    • 2023-03-16
    • 2019-04-11
    相关资源
    最近更新 更多