The Debugging Chronicles : "코드의 미학"

React와 express로 회원 탈퇴 구현하기 본문

오류 원인 분석 해결 방안

React와 express로 회원 탈퇴 구현하기

sweetseonah1004 2024. 7. 5. 08:43

 

먼저 에러 났을 때 코드를 살펴 보자

>>>프론트

- session.js

    const deleteUserApi = async () => {
        try {
            const token = localStorage.getItem('token'); // 또는 쿠키에서 가져오기
            if (!token) {
                throw new Error('No authentication token found');
            }
    
            const response = await fetch('http://localhost:8000/user/delete', {
                method: 'DELETE',
                headers: {
                    'Authorization': `Bearer ${token}` // JWT 토큰을 헤더에 포함
                }
            });
    
            if (!response.ok) {
                throw new Error('Failed to delete user');
            }
            localStorage.clear();
            dispatch(deleteUser(null,false));
            navigate("/logIn");
            return response.json();
        } catch (error) {
            console.error('Failed to delete user:', error.message);
            throw error; // 예외를 상위로 다시 던짐
        }
    };

    const handleDeleteAccount = async () => {
        try {
            const result = await deleteUserApi();
            console.log('Account deleted:', result);
        } catch (error) {
            console.error('Failed to handle account deletion:', error.message);
        }
    };

>>>백엔드 

- controller/user/user.js

// JWT 회원탈퇴
const deleteUser = async (req, res) => {
    const authenticateUser = req.user;
    console.log(authenticateUser);
    await User.deleteOne(authenticateUser);
    res.status(200).json({
        message : "회원 탈퇴가 완료되었습니다."
    })
};


// JWT Strategy : HTTP Authorization 헤더에서 JWT를 추출하여 
const configureJwtStrategy = () => {
    return new Promise((resolve, reject) => {
      const jwtOptions = {
        jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
        secretOrKey: SECRET_KEY,
      };
  
      const strategy = new JwtStrategy(jwtOptions, async (jwtPayload, done) => {
        try {
          const user = await User.findById(jwtPayload.sub);
          if (user) {
            return done(null, user);
          } else {
            return done(null, false);
          }
        } catch (err) {
          return done(err, false);
        }
      });
  
      passport.use(strategy);
      resolve();
    });
  };

// Passport 초기화 및 JWT Strategy 설정
const initializePassport = async () => {
    await configureJwtStrategy();
    app.use(passport.initialize());
  };