Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
students
travel
Commits
48441161
Commit
48441161
authored
Jul 21, 2022
by
Kim, MinGyu
Browse files
deleteUser
parent
8fbd9c22
Changes
5
Show whitespace changes
Inline
Side-by-side
frontend/src/apis/profile.api.ts
View file @
48441161
...
@@ -13,3 +13,7 @@ export const picture = async (formdata: FormData) => {
...
@@ -13,3 +13,7 @@ export const picture = async (formdata: FormData) => {
export
const
nickname
=
async
(
formdata
:
FormData
)
=>
{
export
const
nickname
=
async
(
formdata
:
FormData
)
=>
{
await
axios
.
post
(
`
${
baseUrl
}
/profile`
,
formdata
);
await
axios
.
post
(
`
${
baseUrl
}
/profile`
,
formdata
);
};
};
export
const
deleteUser
=
async
()
=>
{
await
axios
.
post
(
`
${
baseUrl
}
/profile/delete`
);
};
frontend/src/auth/profile.tsx
View file @
48441161
import
React
,
{
useEffect
,
useState
}
from
"
react
"
;
import
React
,
{
useEffect
,
useState
}
from
"
react
"
;
import
{
Profile
}
from
"
../types
"
;
import
{
Profile
}
from
"
../types
"
;
import
{
profileApi
}
from
"
../apis
"
;
import
{
profileApi
}
from
"
../apis
"
;
import
{
useAuth
}
from
"
../auth/auth.context
"
;
export
default
function
Profile
()
{
export
default
function
Profile
()
{
// 로컬 저장소에는 로그인 여부만 저장
// 로컬 저장소에는 로그인 여부만 저장
...
@@ -9,6 +10,7 @@ export default function Profile() {
...
@@ -9,6 +10,7 @@ export default function Profile() {
const
[
file
,
setFile
]
=
useState
<
File
>
();
const
[
file
,
setFile
]
=
useState
<
File
>
();
const
[
imageSrc
,
setImageSrc
]
=
useState
(
""
);
const
[
imageSrc
,
setImageSrc
]
=
useState
(
""
);
const
[
nickname
,
setNickname
]
=
useState
(
""
);
const
[
nickname
,
setNickname
]
=
useState
(
""
);
const
{
logout
}
=
useAuth
();
const
handleProfile
=
async
()
=>
{
const
handleProfile
=
async
()
=>
{
const
user
:
Profile
=
await
profileApi
.
profile
();
const
user
:
Profile
=
await
profileApi
.
profile
();
...
@@ -57,6 +59,10 @@ export default function Profile() {
...
@@ -57,6 +59,10 @@ export default function Profile() {
await
profileApi
.
picture
(
formdata
);
await
profileApi
.
picture
(
formdata
);
};
};
const
deleteClick
=
async
()
=>
{
await
profileApi
.
deleteUser
().
then
(()
=>
logout
());
};
useEffect
(()
=>
{
useEffect
(()
=>
{
userChange
();
userChange
();
},
[]);
},
[]);
...
@@ -119,6 +125,9 @@ export default function Profile() {
...
@@ -119,6 +125,9 @@ export default function Profile() {
<
button
onClick
=
{
handleClick
}
className
=
" border-2 "
>
<
button
onClick
=
{
handleClick
}
className
=
" border-2 "
>
저장하기
저장하기
</
button
>
</
button
>
<
button
onClick
=
{
deleteClick
}
className
=
"border-2"
>
계정 삭제
</
button
>
</
div
>
</
div
>
</
form
>
</
form
>
</
div
>
</
div
>
...
...
src/controllers/user.controller.ts
View file @
48441161
...
@@ -74,3 +74,11 @@ export const postPicture = asyncWrap(async (reqExp, res) => {
...
@@ -74,3 +74,11 @@ export const postPicture = asyncWrap(async (reqExp, res) => {
});
});
res
.
json
();
res
.
json
();
});
});
export
const
deleteUser
=
asyncWrap
(
async
(
reqExp
,
res
)
=>
{
const
req
=
reqExp
as
TypedRequestAuth
<
{
userId
:
ObjectId
}
>
;
// 앞에서는 토큰으로써 사용하기 때문에 JwtPayload 를 사용하고 여기서는 verify 에서 토큰을 디코딩했기에 ObjectId 타입의 string으로 바뀌게 된다.
const
{
userId
}
=
req
.
auth
;
const
profile
=
await
userDb
.
deleteUser
(
userId
);
res
.
json
(
profile
);
});
src/db/user.db.ts
View file @
48441161
import
bcrypt
from
"
bcryptjs
"
;
import
bcrypt
from
"
bcryptjs
"
;
import
{
ObjectId
}
from
"
mongoose
"
;
import
{
ObjectId
}
from
"
mongoose
"
;
import
{
IUser
,
Role
,
Post
,
User
,
Avatar
}
from
"
../models
"
;
import
{
IUser
,
Role
,
Post
,
User
,
Avatar
}
from
"
../models
"
;
import
fs
from
"
fs
"
;
export
const
createUser
=
async
(
user
:
IUser
)
=>
{
export
const
createUser
=
async
(
user
:
IUser
)
=>
{
// 비밀번호 암호화
// 비밀번호 암호화
...
@@ -87,3 +88,15 @@ export const postPicture = async (
...
@@ -87,3 +88,15 @@ export const postPicture = async (
});
});
}
}
};
};
export
const
deleteUser
=
async
(
userId
:
ObjectId
)
=>
{
const
user
=
await
User
.
findById
(
userId
);
if
(
!
(
user
?.
avatar
===
undefined
))
{
const
ref
=
await
Avatar
.
findById
(
user
.
avatar
.
_id
);
fs
.
unlink
(
"
../travel/uploads/
"
+
ref
?.
newfilename
,
(
err
)
=>
{
console
.
log
(
err
);
});
await
Avatar
.
deleteOne
({
_id
:
user
.
avatar
.
_id
});
await
User
.
deleteOne
({
_id
:
userId
});
}
};
src/routes/profile.route.ts
View file @
48441161
...
@@ -8,4 +8,6 @@ router
...
@@ -8,4 +8,6 @@ router
.
get
(
authCtrl
.
requireLogin
,
userCtrl
.
getProfile
)
.
get
(
authCtrl
.
requireLogin
,
userCtrl
.
getProfile
)
.
post
(
authCtrl
.
requireLogin
,
userCtrl
.
postPicture
);
//중간에 req쪽에 fields와 files 넣는 미들웨어 추가
.
post
(
authCtrl
.
requireLogin
,
userCtrl
.
postPicture
);
//중간에 req쪽에 fields와 files 넣는 미들웨어 추가
router
.
route
(
"
/delete
"
).
post
(
authCtrl
.
requireLogin
,
userCtrl
.
deleteUser
);
export
default
router
;
export
default
router
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment