
원래는 로그인하면 /home 으로만 이동했는데, 10명이 가입했는데 10명 모두 /home으로 보이면 누가 로그인 했는지 로그인 정보를 넘겨주지 않는 것 같아서 로그인 한 사람의 id(고유한)를 파라미터에 추가해보도록 했다!
먼저 login 컴포넌트에서 ILoginData()에 data (email, password)를 넘겨준 뒤,
이에 해당하는 userId를 가져온 뒤, 만약 userId가 있다면, /home?id=${userId}로 이동할 수 있도록 코드를 짰다
그럼, ILoginData()에서는 어떤걸 할까?
사용자가 로그인할 때 서버에 요청을 보내고, 성공적으로 로그인하면 사용자의 고유 ID를 반환하는 역할을 하는 코드이다.

로그인 요청
응답 처리:
사용자 데이터 요청:
하는 과정을 거쳐서 사용자의 로그인이 성공하면, userId를 가져올 수 있도록 처리해 주었다.
그럼 여기서 엔드포인트 /user 를 살펴보자
app.get('/user', loginAuth, async (req, res) => {
try {
const token = req.header('Authorization').replace('Bearer ', '');
const decoded = jwt.verify(token, process.env.JWT_SECRET);
const userId = decoded.id; // JWT 토큰에서 추출한 사용자 ID
const user = await User.findById(userId);
if (!user) {
return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
}
// 사용자 정보 응답
return res.status(200).json({ user });
} catch (error) {
console.error('사용자 정보를 가져오는 중 오류 발생:', error.message);
return res.status(500).json({ error: error.message });
}
});
app.use(loginAuth);
토큰 추출
사용자 정보 조회:
요약
1 . /user 경로로 GET 요청이 들어오면 loginAuth 미들웨어로 인증을 확인
2 . Authorization 헤더에서 JWT 토큰을 추출하고 검증하여 사용자 ID를 얻는다
3 . 데이터베이스에서 해당 사용자 ID로 사용자를 조회하고, 사용자 정보를 반환
4 . 각 단계에서 오류가 발생하면 적절한 상태 코드와 메시지를 반환
로그인 화면

회원가입 화면

이렇게 구현해 보았다.
사실 넷플릭스를 살펴보면 크게 화려하거나 뭐가 많지 않아서 깔끔하게 구현했다
(저기 로고 부분은 조금 있다가 S-FLEX를 추가할 예정이다)
여기서 로그인과 회원가입 모두 겹치는 css 속성들이 많아서
여기 loginCss.tsx 파일 안에 css 속성들을 모두 정의한 뒤,
각각의 파일에서 정의한 속성들을 불러다 사용했다!