Commit 48441161 authored by Kim, MinGyu's avatar Kim, MinGyu
Browse files

deleteUser

parent 8fbd9c22
......@@ -13,3 +13,7 @@ export const picture = async (formdata: FormData) => {
export const nickname = async (formdata: FormData) => {
await axios.post(`${baseUrl}/profile`, formdata);
};
export const deleteUser = async () => {
await axios.post(`${baseUrl}/profile/delete`);
};
import React, { useEffect, useState } from "react";
import { Profile } from "../types";
import { profileApi } from "../apis";
import { useAuth } from "../auth/auth.context";
export default function Profile() {
// 로컬 저장소에는 로그인 여부만 저장
......@@ -9,6 +10,7 @@ export default function Profile() {
const [file, setFile] = useState<File>();
const [imageSrc, setImageSrc] = useState("");
const [nickname, setNickname] = useState("");
const { logout } = useAuth();
const handleProfile = async () => {
const user: Profile = await profileApi.profile();
......@@ -57,6 +59,10 @@ export default function Profile() {
await profileApi.picture(formdata);
};
const deleteClick = async () => {
await profileApi.deleteUser().then(() => logout());
};
useEffect(() => {
userChange();
}, []);
......@@ -119,6 +125,9 @@ export default function Profile() {
<button onClick={handleClick} className=" border-2 ">
저장하기
</button>
<button onClick={deleteClick} className="border-2">
계정 삭제
</button>
</div>
</form>
</div>
......
......@@ -74,3 +74,11 @@ export const postPicture = asyncWrap(async (reqExp, res) => {
});
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);
});
import bcrypt from "bcryptjs";
import { ObjectId } from "mongoose";
import { IUser, Role, Post, User, Avatar } from "../models";
import fs from "fs";
export const createUser = async (user: IUser) => {
// 비밀번호 암호화
......@@ -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 });
}
};
......@@ -8,4 +8,6 @@ router
.get(authCtrl.requireLogin, userCtrl.getProfile)
.post(authCtrl.requireLogin, userCtrl.postPicture); //중간에 req쪽에 fields와 files 넣는 미들웨어 추가
router.route("/delete").post(authCtrl.requireLogin, userCtrl.deleteUser);
export default router;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment