Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- pwa적용하기
- 싸피
- db
- git
- 리액트
- 데코레이터
- 플로이드워셜
- QuerySetAPI
- queryset
- Javascript
- 알고리즘
- Django
- VITE
- unionfind
- PWA
- SSAFYcial
- 14658
- sqld
- 싸피셜
- Python
- react
- 싸피10기
- SQL
- TypeScript
- 셀프넘버
- js
- 머신러닝종류
- SSAFY
- 백준
- vitepwa
Archives
- Today
- Total
Meme's IT
[Django] 로그인(3) 비밀번호 바꾸기 본문
2023.10.05 - [Django] - [Django] 로그인(2) 가입/탈퇴/수정
과 이어집니다.
회원정보 수정을 해보면, 비밀번호를 바꾸는 항목이 따로 없고
다음과 같이 바꾸려면 링크를 클릭해서 바꾸라고 함
그래서 그 링크를 들어가보면
서버주소 / 숫자 / password / 의 URL으로 연결되고 없는 페이지라고 함
→ 비밀번호 수정을 위해 해당 페이지를 만들어주면 된다
# 비밀번호 변경시키기
비밀번호 변경 = 인증된 사용자의 Session 데이터를 Update
이전 페이지의 URL에서 가운데 있는 숫자는 user의 pk이다.
그리고, 주소에서 account가 없으므로 url을 account/urls.py의 위치가 아니라
프로젝트의 urls.py에 작성해줘야 한다.
# project/urls.py
from accounts import views
urlpatterns = [
path('admin/', admin.site.urls),
path('articles/', include('articles.urls')),
path('accounts/', include('accounts.urls')),
path('<int:user_pk>/password/',views.change_password,name="change_password") # 추가
]
change_password함수는 accounts/views.py에 작성해준다.
여기서, 비밀번호 변경 시
사용자의 입력 데이터를 받는 built - in Form인 PasswordChangeForm을 사용
# accounts/views.py
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm
def change_password(request, user_pk):
if request.method == "POST":
if form.is_valid():
form = PasswordChangeForm(request.user, request.POST) # 바꿔주고
user = form.save() # 저장
return redirect('article:index')
else:
form = PasswordChangeForm(request.user)
context = {
'form':form
}
return render(request,'accounts/change_password.html', context)
Template/accounts/ 위치에 change_password.html 파일 생성 및 작성
<h1>비밀변호 변경</h1>
<form action="{% url "change_password" user.pk %}" method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="수정하기">
</form>
이후, 다시 이전의 비밀번호 변경 url으로 들어가면 확인할 수 있다.
근데, 비밀번호를 변경하면 기존 세션과 회원 인증 정보가 일치하지 않음
→ 로그아웃 처리가 되버림..
그러한 세션 무효화를 막아주기 위해 update_session_auth_hash(request, user) 함수를 이용한다.
이 함수는 암호가 변경되면 새로운 password의 Session Data로 기존 Session을 자동으로 갱신해 줌
# accounts/views.py 추가
from django.contrib.auth import update_session_auth_hash
def change_password(request, user_pk):
if request.method == "POST":
if form.is_valid():
form = PasswordChangeForm(request.user, request.POST)
user = form.save()
update_session_auth_hash(request, user) # 추가해줌
return redirect('article:index')
'BackEnd > Django' 카테고리의 다른 글
[Django] 로그인(5) 로그인 후, 페이지 다르게 출력하기 (0) | 2023.10.05 |
---|---|
[Django] 로그인(4) 로그인 여부에 따른 출력 (0) | 2023.10.05 |
[Django] 로그인(2) 가입/탈퇴/수정 (0) | 2023.10.05 |
[Django] 로그인(1) 로그인, 로그아웃 (0) | 2023.10.04 |
[Django] 쿠키와 세션 (0) | 2023.10.04 |