- ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ ํฌ๊ฒ 3๊ฐ์ง ์ธ์ฆ ์ ์ฐจ๋ฅผ ์ํ๋ฉ๋๋ค.
- step 1. ์๋ก์ด ๋น๋ฐ๋ฒํธ๊ฐ ํ์ธ์นธ์ ์
๋ ฅ๋ ๋น๋ฐ๋ฒํธ์ ๊ฐ์์ง ๊ฒํ
- step 2. ํ๋ฉด์์ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด์ ๋น๋ฐ๋ฒํธ์ ๋ค๋ฅธ์ง ํ์ธ
- step 3. ์๋กญ๊ฒ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด ๋น๋ฐ๋ฒํธ์ ๊ฐ์์ง ํ์ธ
-
์๋ก์ด ๋น๋ฐ ๋ฒํธ
๋ฐ ์๋ก์ด ๋น๋ฐ ๋ฒํธ ํ์ธ
์ด ๋งค์นญ ๋๋์ง ํ์ธํ๊ธฐ
1. ๋น๋ฐ ๋ฒํธ ๋ณ๊ฒฝ HTML page ์์ฑ
- ์๋ html ์์๋
์๋ก์ด ๋น๋ฐ๋ฒํธ
, ์๋ก์ด ๋น๋ฐ๋ฒํธ ํ์ธ
, ์ด์ ๋น๋ฐ๋ฒํธ
์ ์
๋ ฅํ๋ form
์ ๋ณด๋ฅผ rendering ํฉ๋๋ค.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
change password
<form class="mt-4" action="{% url 'accounts:change_password' %}" method="post" id="change_password_form">
<div class="row">
{# new password #}
<div class="col-lg-12">
<div class="mb-3">
<label class="form-label">์๋ก์ด ๋น๋ฐ๋ฒํธ :</label>
<input type="password" class="form-control" placeholder="์๋ก์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ธ์"
required="" id="new_password" name="new_password">
</div>
</div>
{# confirm new password #}
<div class="col-lg-12">
<div class="mb-3">
<label class="form-label">์๋ก์ด ๋น๋ฐ๋ฒํธ ํ์ธ:</label>
<input type="password" class="form-control" placeholder="์๋ก์ด ๋น๋ฐ๋ฒํธ๋ฅผ ๋ค์ ์
๋ ฅํ์ธ์."
required="" id="confirm_new_password" name="confirm_new_password">
<span id='message'></span>
</div>
</div>
{# old password #}
<div class="col-lg-12">
<div class="mb-3">
<label class="form-label">์ด์ ๋น๋ฐ๋ฒํธ:</label>
<input type="password" class="form-control" placeholder="์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ธ์." required=""
name="old_password"
id="old_password">
</div>
</div>
<div class="col-lg-12 mt-2 mb-0">
<div class="btn btn-primary" onclick="change_password()">๋ณ๊ฒฝํ๊ธฐ</div>
</div>
</div>
</form>
</body>
</html>
2. ์๋ก์ด ๋น๋ฐ๋ฒํธ ์
๋ ฅ ํ์ธํ๊ธฐ
-
step 1
์ client side
์์ ํ์ธํฉ๋๋ค.
- ๋น๋ฐ๋ฒํธ ์
๋ ฅ์ ์ค์๊ฐ์ผ๋ก ๋งค์นญ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค.
function confirm_password() {
$('#new_password, #confirm_new_password').on('keyup', function () {
if ($('#new_password').val() == $('#confirm_new_password').val()) {
$('#message').html('Matching').css('color', 'green');
} else
$('#message').html('Not Matching').css('color', 'red');
});
}
confirm_password()
3. ์๋ฒ์ ๋น๋ฐ๋ฒํธ ์ ์กํ๊ธฐ
-
์๋ก์ด ๋น๋ฐ๋ฒํธ
, ์๋ก์ด ๋น๋ฐ๋ฒํธ ํ์ธ
, ์ด์ ๋น๋ฐ๋ฒํธ
์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์กํฉ๋๋ค.
- ajax ๋ก ์ ์กํฉ๋๋ค.
- ๋น๋ฐ ๋ฒํธ ๋ณ๊ฒฝ ์ฑ๊ณต ์
- ๊ธฐ์กด ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ํผ์ reset ํฉ๋๋ค.
- ์ฑ๊ณต ์๋ฆผ ์ฐฝ์ ๋์๋๋ค.
- ๋น๋ฐ ๋ฒํธ ๋ณ๊ฒฝ ์คํจ ์
- ๊ธฐ์กด ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ํผ์ ์๋ ์ ๋ณด๋ ๊ทธ๋๋ก ์์ต๋๋ค.
- ์คํจ ์๋ฆผ ์ฐฝ์ ๋์๋๋ค.
function change_password() {
let base_url = 'http://localhost:8000'
let url = `${base_url}/change_password/`
let form = $('#change_password_form')
var form_array = form.serialize()
console.log(form)
$.ajax({
url: url,
data: form_array,
method: "POST",
dataType: 'json'
}).done(function (response) {
if (response['error'] === true) { //๋น๋ฐ ๋ฒํธ ๋ณ๊ฒฝ ์คํจ ์
alert(response['msg'])
} else if (response['error'] === false) { //๋น๋ฐ ๋ฒํธ ๋ณ๊ฒฝ ์ฑ๊ณต ์
alert(response['msg'])
// password form ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ง์๋๋ค.
form[0].reset();
$('#message').text('')
}
}).fail(function () {
alert("์์ฒญ ์คํจ");
}).always(function () {
alert("์์ฒญ ์๋ฃ");
});
}
path('change_password/', change_password, name='change_password'),
- step 1, step 2, step 3 ์ธ์ฆ ์ ์ฐจ๋ฅผ ์งํํฉ๋๋ค.
- step 1 ์ ์๋ฒ์์ ๋ค์ ํ๋ฒ ๊ฒ์ฆํฉ๋๋ค.
- 3๋จ๊ณ๊ฐ ๋ชจ๋ ์๋ํ๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
from django.contrib.auth.hashers import check_password
from django.http import JsonResponse
def change_password(request):
"""
Description:
๋น๋ฐ๋ฒํธ ๊ฒ์ฆ ์ ์ฐจ๋ฅผ ๊ฑธ์ฒ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
๋น๋ฐ ๋ฒํธ ๊ฒ์ฆ์ 3๋จ๊ณ๋ก ์งํํฉ๋๋ค.
step 1. ์๋ก์ด ๋น๋ฐ๋ฒํธ๊ฐ ํ์ธ์นธ์ ์
๋ ฅ๋ ๋น๋ฐ๋ฒํธ์ ๊ฐ์์ง ๊ฒํ
step 2. ํ๋ฉด์์ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด์ ๋น๋ฐ๋ฒํธ์ ๋ค๋ฅธ์ง ํ์ธ
step 3. ์๋กญ๊ฒ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด ๋น๋ฐ๋ฒํธ์ ๊ฐ์์ง ํ์ธ
:param request:
:json return:
"""
user = request.user
new_password = request.POST.get('new_password')
confirm_new_password = request.POST.get('confirm_new_password')
old_password = request.POST.get('old_password')
# step 1. ์๋ก์ด ๋น๋ฐ๋ฒํธ๊ฐ ํ์ธ์นธ์ ์
๋ ฅ๋ ๋น๋ฐ๋ฒํธ์ ๊ฐ์์ง ๊ฒํ , ๊ฐ์ผ๋ฉด True
if not confirm_new_password == new_password:
data = {'msg': '์๋ก์ด ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด์ ๋น๋ฐ๋ฒํธ๊ฐ ๋ค๋ฆ
๋๋ค.', 'error': True}
# step 2. ํ๋ฉด์์ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด์ ๋น๋ฐ๋ฒํธ์ ๋ค๋ฅธ์ง ํ์ธ.
elif not check_password(old_password, user.password):
data = {'msg': '๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆฝ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ธ์.', 'error': True}
# step 3. ์๋กญ๊ฒ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด ๋น๋ฐ๋ฒํธ์ ๊ฐ์์ง ํ์ธ, ๊ฐ์ผ๋ฉด False
# ๋ง์ฝ ๊ฐ์ง ์์ผ๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํฉ๋๋ค.
elif check_password(new_password, user.password):
data = {'msg': '์๋กญ๊ฒ ์
๋ ฅํ ๋น๋ฐ๋ฒํธ๊ฐ ๊ธฐ์กด ๋น๋ฐ๋ฒํธ์ ๊ฐ์ต๋๋ค. ๋ณ๊ฒฝํด์ฃผ์ธ์. ', 'error': True}
else:
# ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝํ๊ธฐ
user.set_password(new_password)
user.save()
data = {'msg': '๋น๋ฐ๋ฒํธ๊ฐ ์์ ํ๊ฒ ๋ณ๊ฒฝ๋์์ต๋๋ค', 'error': False}
return JsonResponse(data)