当前位置:   article > 正文

小白你还不会使用jwt吗?django实现jwt_django如何引入jwt

django如何引入jwt

 配置key和时间【在setting中添加】

  1. token_key = secrets.token_hex(16)
  2. JWT_SECRET_KEY = token_key
  3. JWT_EXPIRATION_DELTA = datetime.timedelta(days=1)

设置【在setting中添加】

  1. REST_FRAMEWORK = {
  2.     'DEFAULT_AUTHENTICATION_CLASSES': (
  3.         'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
  4.         # 其他认证类...
  5.     ),
  6. }

创建一个构造函数

  1. def create_jwt_token(username, password, role):
  2. # payload 可以更改
  3. payload = {
  4. 'password': password,
  5. 'username': username,
  6. 'role': role,
  7. 'exp': datetime.utcnow() + settings.JWT_EXPIRATION_DELTA
  8. }
  9. return jwt.encode(payload, settings.JWT_SECRET_KEY, algorithm='HS256')
'
运行

使用构造函数生成token

  1. token = create_jwt_token(username, password, role)
  2. res['token'] = token.decode('utf-8')

验证

前端在登录时候储存信息

  1.  login() {
  2.             axios.post("http://localhost:8000/api/login/", this.user).then(res => {
  3.                 if (res.data.code === 200) {
  4.                     this.$message.success(res.data.msg)
  5.                     localStorage.setItem('jwtToken', token);
  6.                     setTimeout(() => {
  7.                         location.href = "/"
  8.                     }, 400)
  9.                 } else {
  10.                     this.$message.error(res.data.msg)
  11.                 }
  12.             })

调用储存的token

  1. methods: {
  2. get_username() {
  3. // 获取存储在本地存储中的JWT令牌
  4. const token = localStorage.getItem('jwtToken');
  5. // 如果没有令牌,你可能需要进行一些处理,比如重定向到登录页面或者显示错误信息
  6. if (!token) {
  7. console.error("未找到JWT令牌");
  8. return;
  9. }
  10. // 将JWT令牌添加到请求标头中
  11. const headers = {
  12. 'Authorization': `Bearer ${token}`
  13. };
  14. axios.get("http://localhost:8000/api/get_username/",
  15. { headers }
  16. ).then(res => {
  17. console.log(res);
  18. if (res.data.code[0] === 200) {
  19. this.username = res.data.username[0]
  20. } else {
  21. this.$message.error(res.data.msg)
  22. }
  23. })
  24. }
  25. },
  26. created() {
  27. this.get_username()
  28. }

后端解析jwt

  1. import jwt
  2. from django.conf import settings
  3. from django.http import JsonResponse
  4. from django.views import View
  5. class IndexView(View):
  6. def get(self, request):
  7. res = {
  8. "msg": "获取token失败",
  9. "code": 425,
  10. "username": None,
  11. "role": None
  12. }
  13. token = request.headers.get('Authorization')
  14. # 解析token
  15. if not token:
  16. return JsonResponse(res)
  17. token = token.split(" ")[1]
  18. try:
  19. decoded_token = jwt.decode(token, settings.JWT_SECRET_KEY, algorithms=['HS256'])
  20. username = decoded_token['username']
  21. role = decoded_token['role']
  22. except jwt.ExpiredSignatureError:
  23. res["msg"] = "token已过期"
  24. return JsonResponse(res)
  25. except jwt.InvalidTokenError:
  26. res["msg"] = "token无效"
  27. return JsonResponse(res)
  28. res["code"] = 200,
  29. res["msg"] = "获取成功",
  30. res["username"] = username,
  31. res["role"] = role
  32. return JsonResponse(res)

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/893717
推荐阅读
相关标签
  

闽ICP备14008679号