Framework中为用户登录创建Json

Framework中为用户登录创建Json

本文介绍了如何在Django Rest Framework中为用户登录创建Json Web令牌?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将JWT集成到我的用户登录API进行身份验证。如何将其与下面添加的现有代码集成。在代码中,我添加了一个虚拟令牌,需要相应地对其进行更改。谢谢。

I want to integrate JWT to my User login API for Authentication. How can I integrate it with my existing code that I have added below. In the code I have added a dummy token that needs to be changed accordingly. Thank you.

从我的Django项目中添加一些相关的代码部分以供参考:

Adding some relevant parts of code from my django project for reference:

序列化器

class UserLoginSerializer(ModelSerializer):
token = CharField(allow_blank=True, read_only=True)

class Meta:
    model = User
    fields = [
        'username',
        'password',
        'token',
    ]
    extra_kwargs = {"password":
                        {"write_only": True}
                    }

def validate(self, data):
    user_obj = None
    username = data.get("username", None)
    password = data["password"]
    if not username:
        raise ValidationError("Kullanıcı adı gerekli.")

    user = User.objects.filter(
        Q(username=username)
        ).distinct()
    user = user.exclude(email__isnull=True).exclude(email__iexact='')
    if user.exists() and user.count() == 1:
        user = user.first()
    else:
        raise ValidationError("Böyle bir Kullanıcı Adı yoktur.")

    if user_obj:
        if not user_obj.check_password(password):
            raise ValidationError("Tekrar deneyiniz.")
    data["token"] = "asdasdasdasd"
    return data

观看次数

class UserLoginAPIView(APIView):
permission_classes = [AllowAny]
serializer_class = UserLoginSerializer

def post(self, request, *args, **kwargs):
    data = request.data
    serializer = UserLoginSerializer(data=data)
    if serializer.is_valid(raise_exception=True):
        new_data = serializer.data
        return Response(new_data, status=HTTP_200_OK)
    return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)

设置

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
    ),
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

urls

urlpatterns = [
    url(r'^login/$', UserLoginAPIView.as_view(), name='login'),
    url(r'^api-token-auth/', obtain_jwt_token),
    url(r'^api-token-refresh/', refresh_jwt_token),
    url(r'^api-token-verify/', verify_jwt_token),
    url(r'^register/$', UserCreateAPIView.as_view(), name='register'),
]


推荐答案

您可以使用其内置视图 rest_framework_jwt.views.obtain_jwt_token 进行用户登录。

You can use its in-built view rest_framework_jwt.views.obtain_jwt_token for User Login.

它创建一个令牌。

然后您需要转到 RestrictedView 并将令牌用于身份验证。就是这样。

And then you need to go to RestrictedView and use the token for authentication. That's all.

这篇关于如何在Django Rest Framework中为用户登录创建Json Web令牌?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-16 08:31