如何在Django Rest Framework中为用户登录创建Json Web令牌? [英] How to create Json Web Token to User login in Django Rest Framework?
问题描述
我想将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令牌?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!