Feat: Add password find page
This commit is contained in:
parent
9b0c02f35f
commit
b65df0354a
@ -22,4 +22,8 @@ function registMember(member) {
|
|||||||
localAxios.post('/member/join', JSON.stringify(member));
|
localAxios.post('/member/join', JSON.stringify(member));
|
||||||
}
|
}
|
||||||
|
|
||||||
export { userConfirm, findByToken, tokenRegeneration, logout, registMember };
|
function resetPassword(email) {
|
||||||
|
return localAxios.put(`/member/findPw/${email}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
export { userConfirm, findByToken, tokenRegeneration, logout, registMember, resetPassword };
|
||||||
|
@ -39,7 +39,7 @@ async function handleSubmit() {
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="password">비밀번호</label>
|
<label for="password">비밀번호</label>
|
||||||
<input v-model="password" type="password" id="password" name="password" required />
|
<input v-model="password" type="password" id="password" name="password" required />
|
||||||
<RouterLink class="forgot" :to="{ name: 'home' }">
|
<RouterLink class="forgot" :to="{ name: 'user-reset' }">
|
||||||
<TextButton> 비밀번호를 잊으셨나요? </TextButton>
|
<TextButton> 비밀번호를 잊으셨나요? </TextButton>
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
</div>
|
</div>
|
||||||
|
104
src/components/users/UserResetPassword.vue
Normal file
104
src/components/users/UserResetPassword.vue
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { resetPassword } from '@/api/member';
|
||||||
|
import TextButton from '../common/TextButton.vue';
|
||||||
|
import FilledButton from '../common/FilledButton.vue';
|
||||||
|
|
||||||
|
const email = ref('');
|
||||||
|
const resetDone = ref(false);
|
||||||
|
|
||||||
|
function handleSubmit() {
|
||||||
|
resetPassword(email.value);
|
||||||
|
resetDone.value = true;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<form v-if="!resetDone" class="wrapper" @submit.prevent="handleSubmit" action="POST">
|
||||||
|
<h2>비밀번호 찾기</h2>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="email">이메일</label>
|
||||||
|
<input v-model="email" type="email" id="email" required />
|
||||||
|
</div>
|
||||||
|
<div class="form-handler">
|
||||||
|
<FilledButton primary class="button" type="submit">비밀번호 찾기</FilledButton>
|
||||||
|
<p>
|
||||||
|
<RouterLink :to="{ name: 'user-login' }">
|
||||||
|
<TextButton>로그인 화면으로 돌아가기</TextButton>
|
||||||
|
</RouterLink>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div v-else class="wrapper">
|
||||||
|
<h2>비밀번호 찾기</h2>
|
||||||
|
<p class="message">비밀번호 재설정 메일을 발송했어요. 메일을 확인해주세요.</p>
|
||||||
|
<RouterLink class="button" :to="{ name: 'user-login' }">
|
||||||
|
<FilledButton primary class="button">로그인</FilledButton>
|
||||||
|
</RouterLink>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 40px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-group,
|
||||||
|
.form-handler {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
gap: 4px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-handler {
|
||||||
|
gap: 12px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--color-text-secondary);
|
||||||
|
transition: color 0.25s;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
border-width: 1px;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
transition:
|
||||||
|
border-color 0.25s,
|
||||||
|
outline-color 0.25s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.forgot {
|
||||||
|
align-self: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
width: 100%;
|
||||||
|
height: 48px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message {
|
||||||
|
font-size: 16px;
|
||||||
|
margin: 40px 0;
|
||||||
|
}
|
||||||
|
</style>
|
@ -46,6 +46,11 @@ const router = createRouter({
|
|||||||
beforeEnter: onlyAuthUser,
|
beforeEnter: onlyAuthUser,
|
||||||
component: () => import('@/components/users/UserMyPage.vue'),
|
component: () => import('@/components/users/UserMyPage.vue'),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'reset',
|
||||||
|
name: 'user-reset',
|
||||||
|
component: () => import('@/components/users/UserResetPassword.vue'),
|
||||||
|
},
|
||||||
// {
|
// {
|
||||||
// path: "modify/:userid",
|
// path: "modify/:userid",
|
||||||
// name: "user-modify",
|
// name: "user-modify",
|
||||||
|
Loading…
Reference in New Issue
Block a user