如果用户存在于我的数据库中,我不知道如何返回令牌。 我有带有登录名和密码字段的用户模型,并且已经从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)),
]
这行得通吗?我不确定,因为无法检查是否有人通过令牌以及令牌是否正确
答案 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]
它仅允许经过身份验证的用户使用该端点