로그아웃뷰 작동 관련 (2025년 3월)
129
2 asked
1)
앵커태그로 로그인, 로그아웃 구현하고 기존 로그인 되어있던 상황에서 로그아웃을 진행하니 에러가 발생 (405 에러)
2) 장고의 LogoutView 는 POST 요청만 허용함
?next={{ request.path }} 는 GET 요청으로
logout 누르면 /logout?next=/account/hello_world/ 로 GET 요청하게됨
따라서, 정상적으로 로그아웃뷰를 사용하려면
1) 로그아웃 링크를 POST 요청으로 보내는 폼으로 변경
2) LogoutView 의 설정을 변경하여 GET 요청도 허용
보안상 2는 권장되지 않는 사항이며, 1의 방법으로 처리
{% else %}
<form action="{% url 'accountapp:logout' %}" method="post" style="display: inline;">
{% csrf_token %}
<button type="submit" class="btn btn-link" style="text-decoration: none; padding: 0; margin: 0;">
<span>Logout</span>
</button>
</form>
{% endif %}
주요 변경사항
1) 로그아웃 앵커 태그를 form 태그로 변경
2) 폼의 method 를 post 로 지정
3) 이에따라 csrf 토큰 추가
추가로 logout 이후 redirect 경로를 설정해줘야하는데, 이는 pragmatic/settings.py 에서 설정
# Logout Redirect URL
LOGOUT_REDIRECT_URL = '/account/hello_world/'
마지막 머물렀던 페이지에서 로그아웃이 되게 하고 싶다면, 커스텀 로그아웃뷰를 만들어야하는데, 보안상 권장되지 않는다고 함.
+++
왜인지는 모르겠으나 로그인도
?next={{ request.path }} 를 먹지 않아서
pragmatic/settings.py 에서 로그인 리다이렉트 URL 을 추가하여 처리하였음
# Login Redirect URL
LOGIN_REDIRECT_URL = '/account/hello_world/'
# Logout Redirect URL
LOGOUT_REDIRECT_URL = '/account/hello_world/'
이 경우 html 템플릿에서 next 를 사용할 필요 없고 사이트 어디서 로그인하던 /account/hello_world 로 리다이렉트 시킴
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
유정렬님께서 Django에서의 로그아웃 동작 관련 문제와 해결 방안에 대해 설명해 주셨네요. 주어진 상황을 정리하고 몇 가지 주요 변경사항을 살펴보면서 올바른 방법을 설정하셨습니다.
로그아웃 구현 방법
로그아웃을 앵커 태그 대신 폼 태그로 구현하여 HTTP POST 요청을 보낼 수 있도록 변경하셨습니다. 이는 보안을 유지하면서 405 에러를 방지하는 적절한 방법입니다.CSRF 토큰 추가
POST 요청을 사용하기 위해 form에 CSRF 토큰을 추가하여, CSRF 공격을 방지할 수 있도록 하였습니다.리다이렉트 설정
로그아웃 후 특정 페이지로 리다이렉트 되도록LOGOUT_REDIRECT_URL을 설정하였습니다. 또한 로그인 시에도 같은 방식으로LOGIN_REDIRECT_URL을 설정하여 ?next 파라미터를 대신할 수 있게 하셨습니다.
이와 같은 설정은 보안과 사용자 경험을 모두 고려한 좋은 습관입니다. 커스텀 로그아웃 뷰를 만드는 것도 방법이 될 수 있지만, 가능하면 Django에서 제공하는 기본 기능을 활용하는 것을 권장드립니다.
추가로, 참고하실 만한 사항이 필요하시다면, Django 공식 문서를 확인하는 것도 좋은 방법입니다. 앞으로도 멋진 개발 응원합니다!
강의에 나왔던 js 파일이 깃허브에 없습니다
1
67
1
모바일 디버깅, 반응형 레이아웃 4분48초 질문
0
45
1
decorator 관련질문입니다.
0
51
1
PasswordChangeView
0
93
2
실행에러질문
0
147
1
@login_required 데코레이터 사용시 리다이렉트는 어디서 참조하여 설정을 하는걸까요?
0
110
1
CacheBackend 관련 에러
0
171
1
21강 CreateView를 통한 회원가입 구현 질문
0
319
1
53강 disallowedhost
0
334
2
502 Bad Gateway
0
469
1
mariadb 접근권한 오류
0
533
2
logout 후 빈 화면으로 이동합니다 ㅠㅠ
0
451
2
로그아웃 후 빈 화면으로 이동
0
325
1
서버 운영 관련 질문 드립니다.(Unable to retirve...)
0
228
1
static/base.css파일을 인식을 못합니다
0
374
1
안녕하세요 19강 디버깅 설정 질문있습니다.
0
288
1
프로필 update편 질문있습니다.
0
373
1
수업질문
0
389
1
COOP error
0
524
1
61강 Dockerfile error
0
593
1
static안에 base.css 에서 정의한 클래스가 적용되지 않습니다.
0
487
1
static 파일 중 jpg 파일만 로드 불가
0
412
1
58강 static 파일 적용 안됨
0
541
1
49강 ngnix Deploy the container 500 error
0
387
1

