2024.02.08 TIL - 뉴스피드 프로젝트(2)

김민석·2024년 2월 13일
0

TIL

목록 보기
31/78

회원가입과 로그인

회원가입

  • 회원가입 시 비밀번호가 6자리 이상인지 확인
  • 회원가입 시 비밀번호와 비밀번호 확인이 일치하는지
  • 회원가입 시 이메일이 이미 가입된 이메일인지

위 조건에 충족되면 회원가입이 성공적으로 진행되는 코드를 짜보았다.

// 회원가입 API
router.post('/sign-up', async (req, res, next) => {
  try {
    const {
      email,
      password,
      passwordchek,
      name,
      age,
      gender,
      interest,
      selfInfo,
    } = req.body;

    if (!(password.length >= 6))
      return res
        .status(400)
        .json({ message: '비밀번호는 6자리 이상을 입력해주세요' });

    if (password !== passwordchek)
      return res.status(400).json({ message: '비밀번호가 일치하지 않습니다' });

    const user = await prisma.users.findFirst({
      where: { email },
    });

    if (user)
      return res.status(409).json({ message: '이미 가입된 이메일입니다.' });

    const hashpassword = await bcrypt.hash(password, 10);

    await prisma.users.create({
      data: {
        email,
        password: hashpassword,
        name,
        age,
        gender,
        interest,
        selfInfo,
      },
    });

    return res.status(201).json({ message: '회원가입이 완료되었습니다.' });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});

로그인

  • 존재하는 이메일인지 확인
  • 비밀번호가 일치하는지

위 조건에 충족되면 로그인이 된다!

// 로그인 API
router.post('/sign-in', async (req, res, next) => {
  const { email, password } = req.body;
  const user = await prisma.users.findFirst({ where: { email } });
  if (!user)
    return res.status(401).json({ message: '존재하지 않는 이메일입니다.' });
  if (!(await bcrypt.compare(password, user.password)))
    return res.status(401).json({ message: '비밀번호가 일치하지 않습니다.' });
  // 엑세스 토큰 생성!!
  if (!createAccessToken(res, user.userId)) {
    return res
      .status(401)
      .json({ message: 'ACCESS Token을 발급받지 못했습니다.' });
  }
  return res.status(200).json({ message: '로그인에 성공하였습니다.' });
});
profile
화이팅 화이팅

0개의 댓글