inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Quyết định và Django! Tạo Pinterest bằng Django: Từ đầu đến triển khai

Thực hiện đăng nhập/đăng xuất

로그아웃뷰 작동 관련 (2025년 3월)

130

wjdfuf229762

2 câu hỏi đã được viết

1

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 로 리다이렉트 시킴

python django docker

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

유정렬님께서 Django에서의 로그아웃 동작 관련 문제와 해결 방안에 대해 설명해 주셨네요. 주어진 상황을 정리하고 몇 가지 주요 변경사항을 살펴보면서 올바른 방법을 설정하셨습니다.

  1. 로그아웃 구현 방법
    로그아웃을 앵커 태그 대신 폼 태그로 구현하여 HTTP POST 요청을 보낼 수 있도록 변경하셨습니다. 이는 보안을 유지하면서 405 에러를 방지하는 적절한 방법입니다.

  2. CSRF 토큰 추가
    POST 요청을 사용하기 위해 form에 CSRF 토큰을 추가하여, CSRF 공격을 방지할 수 있도록 하였습니다.

  3. 리다이렉트 설정
    로그아웃 후 특정 페이지로 리다이렉트 되도록 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