DRF Admin 로그인이 안될때 with 포스트맨

은경·2025년 2월 4일
0

📌 브라우저에서는 어드민 페이지의 로그인이 가능하지만
Postman으로 API 요청 시 실패하는 경우 (세션 기반 인증)

  1. 파라미터가 없는 [GET] localhost:8000/admin/ 요청
  • 응답 헤더의 쿠키에 있는csrftoken을 저장하기 위해서 Script를 사용.
  • Post-response는 요청 후 실행할 스크립트이며 아래의 스크립트를 작성하면 응답 받은 쿠키의 csrftoken을 글로벌 변수로 저장한다.
    • Pre-request는 요청 전 실행할 스크립트.
var cookies = pm.response.headers.get("set-cookie");
if (cookies) {
    var csrfMatch = cookies.match(/csrftoken=([^;]+)/);
    if (csrfMatch) {
        var csrfToken = csrfMatch[1];
        pm.globals.set("csrftoken", csrfToken);
        console.log("CSRF Token 저장:", csrfToken);
    } else {
        console.log("CSRF Token이 없음.");
    }
} else {
    console.log("Set-Cookie가 없음");
};

  1. [POST] localhost:8000/admin/login 요청
  • 위의 Cookie 부분이 체크박스가 해제 되어있는 이유는 숨겨진 헤더 (10 hidden) 안에 자동으로 설정이 되어있기 때문.
  • X-CSRFToken 키에 글로벌 변수로 저장했던 csrftoken 값 추가
  • Body는 form-data 혹은 x-www-form-urlencoded
  • 처음 GET 요청에서 받았던 토큰을 쿠키에 담아서 로그인 정보와 함께 요청하면 DRF 서버에서 토큰 값 확인 후 session_id를 돌려주며 성공 시 DB의 django_session 테이블에 저장된다.

  • 🔥 중요 : this_is_the_login_form 키값 추가
    • 1번 요청에서 html reponse_body 안에 들어있던 csrfmiddlewaretoken 값은 본인의 경우엔 필요 없었다.

로그인 성공 시 위처럼 sessionid가 저장된다.

profile
Python 서버 개발자

0개의 댓글

관련 채용 정보