JWT 이해 및 테스트 케이스에서 simplejwt 만료 확인

monkut

나는 djangorestframework-simplejwt 만료 를 이해하려고 노력하고 있으며 토큰이 만료되면 무엇이 반환되는지 알고 싶습니다.

이것을 탐구하기 위해 내 django 프로젝트에서 간단한 테스트 케이스를 작성했지만 만료가 발생하지 않는 것 같습니다.

views.py

import json
from http import HTTPStatus

from django.http import JsonResponse
from rest_framework.decorators import api_view

from .models import Visitor


@api_view(["POST"])
def visitor_post(request):
    body_unicode = request.body.decode("utf-8")
    if not body_unicode.strip():
        return JsonResponse({"status": HTTPStatus.BAD_REQUEST}, status=HTTPStatus.BAD_REQUEST)

    body = json.loads(body_unicode)
    submitted_datetime = body["submitted_datetime"]

    visitor = Visitor(
        representative_name=body["representative_name"],
        visitor_type=body["visitor_type"],
        visitor_count=body["visitor_count"],
        submitted_datetime=submitted_datetime,
    )
    visitor.save()
    return JsonResponse({"status": HTTPStatus.CREATED}, status=HTTPStatus.CREATED)

현재 내 테스트 케이스는 다음과 같습니다.

tests.py

import datetime
import json
from time import sleep
from http import HTTPStatus
from typing import Optional, Tuple

from accounts.models import CustomUser
from django.urls import reverse
from django.utils import timezone
from django.test import override_settings
from rest_framework.test import APIClient, APITestCase


EXPIRE_WAIT_SECONDS = 5
SIMPLE_JWT_EXPIRE_TEST_SETTINGS = {
    "ACCESS_TOKEN_LIFETIME": datetime.timedelta(seconds=EXPIRE_WAIT_SECONDS),
    "REFRESH_TOKEN_LIFETIME": datetime.timedelta(days=14),
    "ROTATE_REFRESH_TOKENS": True,
    "BLACKLIST_AFTER_ROTATION": False,
    "ALGORITHM": "HS256",
    "SIGNING_KEY": 'kkdkasjf;a',
    "VERIFYING_KEY": None,
    "AUTH_HEADER_TYPES": ("JWT",),
    "USER_ID_FIELD": "id",
    "USER_ID_CLAIM": "user_id",
    "AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",),
    "TOKEN_TYPE_CLAIM": "token_type",
}


class ViewsTestCase(APITestCase):
    def setUp(self):
        self.valid_user = CustomUser(last_name="user", first_name="valid", username="validuser", email="[email protected]")
        self.valid_user_password = "mysecretpassword"
        self.valid_user.set_password(self.valid_user_password)
        self.valid_user.save()
        self.apiclient = APIClient()

    def _get_jwt_token(self, username: Optional[str] = None, password: Optional[str] = None) -> Tuple[str, str]:
        if not username:
            username = self.valid_user.username
        if not password:
            password = self.valid_user_password
        body = {"username": username, "password": password}
        url = reverse("token_obtain_pair")
        response = self.apiclient.post(url, data=body, format="json")
        self.assertEqual(response.status_code, 200)
        token_data = json.loads(response.content)
        return token_data["access"], token_data["refresh"]

    @override_settings(SIMPLE_JWT=SIMPLE_JWT_EXPIRE_TEST_SETTINGS)
    def test_visitor_post_token_expire(self):
        access_token, _ = self._get_jwt_token()

        now = timezone.now()
        data = {
            "representative_name": "Somename",
            "visitor_count": 1,
            "submitted_datetime": now.isoformat(),
        }
        sleep(EXPIRE_WAIT_SECONDS + 1)
        self.apiclient.credentials(HTTP_AUTHORIZATION=f"JWT {access_token}")
        url = "/visitors/"
        response = self.apiclient.post(url, data=data, format="json")
        self.assertEqual(response.status_code, HTTPStatus.UNAUTHORIZED)

이로 인해 일종의 권한 부여 오류가 발생할 것으로 예상 401하지만 여전히 보호 된 뷰를 생성하는 것 같습니다.

self.assertEqual (response.status_code, HTTPStatus.UNAUTHORIZED) AssertionError : 201! = HTTPStatus.UNAUTHORIZED : 401

토큰이 만료되지 않는 이유는 무엇입니까? 또는 토큰이 만료되도록하려면 어떻게해야합니까?

아마도 나는 이것을 올바르게 이해하지 못할 것입니다.

내 이해는 ACCESS_TOKEN_LIFETIME만료되면 더 이상을 사용할 수 없으며 access_token토큰을 사용하여 새 토큰을 받아야합니다 refresh. 그 맞습니까?

gmc

플러그인은 설정을 가져와 부팅시 개체를 인스턴스화해야합니다. 런타임에 설정을 다시 읽지 않으므로 재정의하는 것은 쓸모가 없습니다.

당신이했던 것처럼,이 기능을 테스트하는 적절한 방법은 테스트를위한 별도의 설정 모듈을 가지고 거기에 플러그인 설정을 두는 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Django (drf 및 simplejwt)에서 JWT 기반 인증을 정확히 어떻게 구현해야합니까?

분류에서Dev

simplejwt 모듈을 사용하여 django에서 jwt 액세스 토큰 만료 시간 수정

분류에서Dev

j meter 테스트 스크립트에서 Java 스크립트, 캐스케이드 스타일 시트를 제외하고 성능 테스트에서 응답 시간을 확인하기 위해 html 만 포함하는 이유는 무엇입니까?

분류에서Dev

단위 테스트에서 Spring 애플리케이션 컨텍스트 시작 및 종료

분류에서Dev

오프라인 및 온라인에서 코드 조각을 테스트하지만 xctests 2 개 케이스로 계산

분류에서Dev

대부분의 애플리케이션에서 호스트 이름을 확인할 수 없지만 ping 및 브라우저는 성공했습니다.

분류에서Dev

React Jest에서 Blob 응답을 확인하기위한 테스트 케이스

분류에서Dev

Karma Jasmine 단위 테스트 케이스에서 날짜 형식 확인

분류에서Dev

테이블 셀, 부트 스트랩 내 한 줄의 텍스트 및 확인란

분류에서Dev

jQuery-img 너비가 '이상'및 '미만'인지 테스트

분류에서Dev

jQuery-img 너비가 '이상'및 '미만'인지 테스트

분류에서Dev

로직은 단위 테스트 케이스 방법에서 확인해야합니다.

분류에서Dev

자바 스크립트 신용 카드 번호 및 만료일 확인

분류에서Dev

Angular + Jasmine에서 이벤트 체인 및 module.run () 테스트

분류에서Dev

테스트에서만 GraphQL 스키마의 인터페이스 유형을 확인할 수 없습니다.

분류에서Dev

Python에서 테스트 케이스를 만들기 위해 RobotFramework API 사용

분류에서Dev

getMockContext (). getFilesDir () = "/ dev / null"로 인해 테스트 케이스에서 오류 발생

분류에서Dev

단위 테스트에서 Angular2 트리거 버튼 클릭 및 이벤트 처리 확인

분류에서Dev

rspec 및 capybara를 사용하여 인덱스 / 확인 / 완료 플로우 페이지를 테스트하는 방법은 무엇입니까?

분류에서Dev

만료 및 종료 된 케이스의 작성 범위 문제-Rails 4

분류에서Dev

ADCX 및 Adox의 테스트 케이스

분류에서Dev

JSP에서 HTML 엔티티 이스케이프 및 이스케이프 해제

분류에서Dev

perl-SNMP에서 호스트 이름 및 AP 상태 확인

분류에서Dev

출석 테이블 MYSQL에서 라스트 인 및 라스트 아웃 찾기

분류에서Dev

스프링 부트 애플리케이션의 두 가지 인증 메커니즘 (Basic 및 JWT)

분류에서Dev

PrimeNg 확인 서비스에 대한 Jasmine 테스트 케이스가 작동하지 않음

분류에서Dev

SoapUI 프로젝트에서 모든 테스트 케이스 및 테스트 단계 가져 오기

분류에서Dev

데이터베이스에서 레이블 확인 및 표시

분류에서Dev

IDE 도구로 웹 사이트 만들기 및 웹 서버에서 테스트

Related 관련 기사

  1. 1

    Django (drf 및 simplejwt)에서 JWT 기반 인증을 정확히 어떻게 구현해야합니까?

  2. 2

    simplejwt 모듈을 사용하여 django에서 jwt 액세스 토큰 만료 시간 수정

  3. 3

    j meter 테스트 스크립트에서 Java 스크립트, 캐스케이드 스타일 시트를 제외하고 성능 테스트에서 응답 시간을 확인하기 위해 html 만 포함하는 이유는 무엇입니까?

  4. 4

    단위 테스트에서 Spring 애플리케이션 컨텍스트 시작 및 종료

  5. 5

    오프라인 및 온라인에서 코드 조각을 테스트하지만 xctests 2 개 케이스로 계산

  6. 6

    대부분의 애플리케이션에서 호스트 이름을 확인할 수 없지만 ping 및 브라우저는 성공했습니다.

  7. 7

    React Jest에서 Blob 응답을 확인하기위한 테스트 케이스

  8. 8

    Karma Jasmine 단위 테스트 케이스에서 날짜 형식 확인

  9. 9

    테이블 셀, 부트 스트랩 내 한 줄의 텍스트 및 확인란

  10. 10

    jQuery-img 너비가 '이상'및 '미만'인지 테스트

  11. 11

    jQuery-img 너비가 '이상'및 '미만'인지 테스트

  12. 12

    로직은 단위 테스트 케이스 방법에서 확인해야합니다.

  13. 13

    자바 스크립트 신용 카드 번호 및 만료일 확인

  14. 14

    Angular + Jasmine에서 이벤트 체인 및 module.run () 테스트

  15. 15

    테스트에서만 GraphQL 스키마의 인터페이스 유형을 확인할 수 없습니다.

  16. 16

    Python에서 테스트 케이스를 만들기 위해 RobotFramework API 사용

  17. 17

    getMockContext (). getFilesDir () = "/ dev / null"로 인해 테스트 케이스에서 오류 발생

  18. 18

    단위 테스트에서 Angular2 트리거 버튼 클릭 및 이벤트 처리 확인

  19. 19

    rspec 및 capybara를 사용하여 인덱스 / 확인 / 완료 플로우 페이지를 테스트하는 방법은 무엇입니까?

  20. 20

    만료 및 종료 된 케이스의 작성 범위 문제-Rails 4

  21. 21

    ADCX 및 Adox의 테스트 케이스

  22. 22

    JSP에서 HTML 엔티티 이스케이프 및 이스케이프 해제

  23. 23

    perl-SNMP에서 호스트 이름 및 AP 상태 확인

  24. 24

    출석 테이블 MYSQL에서 라스트 인 및 라스트 아웃 찾기

  25. 25

    스프링 부트 애플리케이션의 두 가지 인증 메커니즘 (Basic 및 JWT)

  26. 26

    PrimeNg 확인 서비스에 대한 Jasmine 테스트 케이스가 작동하지 않음

  27. 27

    SoapUI 프로젝트에서 모든 테스트 케이스 및 테스트 단계 가져 오기

  28. 28

    데이터베이스에서 레이블 확인 및 표시

  29. 29

    IDE 도구로 웹 사이트 만들기 및 웹 서버에서 테스트

뜨겁다태그

보관