iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
Python

使用 Django 框架和 Wagtail,快速打造一個 CMS 網站系列 第 27

D27 - 在 login 成功後,會回傳 JWT token 給 client site

  • 分享至 

  • xImage
  •  

D26 我們介紹了 JWT token,接下來,我們要在 user login 成功後,回傳 jwt token 給 client 端

先安裝 djangorestframework-simplejwt

pip install djangorestframework-simplejwt

在 mysite/setting/base.py 加上安裝的 lib,和基本的 JWT token 設定

INSTALLED_APPS = [
		...,		
    "rest_framework_simplejwt", # 加上這個

]

from datetime import timedelta

# 讓 access token 的時效只有 10 min
# refresh token 有 1 天
SIMPLE_JWT = {
    "ACCESS_TOKEN_LIFETIME": timedelta(minutes=10),
    "REFRESH_TOKEN_LIFETIME": timedelta(days=1),
}

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework_simplejwt.authentication.JWTAuthentication",
    )
}

開始修改 api/view.py

讓 login 的 respnose 改為 jwt token respones

from django.contrib.auth import authenticate
from django.http import JsonResponse
from rest_framework.decorators import api_view
from rest_framework_simplejwt.tokens import RefreshToken

@api_view(["GET"])
def hello_world(request):
    return JsonResponse({"message": "Hello, World!"})

@api_view(["POST"])
def login_view(request):
    account = request.data.get("account")
    password = request.data.get("password")

    user = authenticate(username=account, password=password)

    if user is not None:
        refresh = RefreshToken.for_user(user)
        return JsonResponse({
            "message": "Login successful!",
            "access_token": str(refresh.access_token),
            "refresh_token": str(refresh)
        }, status=200)
    else:
        return JsonResponse({"message": "Invalid credentials."}, status=401)

啟動 server

python manage.py runserver

然後用 postman 打一下登入,現在的回應,就會是 jwt token 格式的 json

https://ithelp.ithome.com.tw/upload/images/20241008/20140622J2Sz1MG9LC.png


上一篇
D26 - JWT token 簡介,因為接下來會用到
下一篇
D28 - 驗證來自 request 的 JWT token
系列文
使用 Django 框架和 Wagtail,快速打造一個 CMS 網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言