본문 바로가기

개인과제(로그인,회원가입 및 Mysql)

[내일배움캠프] 주특기 숙련주차 개인과제 lv2 로그인 회원가입 기능-2-

로그인 기능을 구현하자

기존 CRUD 기능 구현에서는 게시글과 댓글에 작성자가 따로 Password를 기입해서 작성, 수정, 삭제가 가능했다.

이번에는 로그인을 통해서 자동으로 본인이 인증되고 본인이 작성한 댓글과 게시판을 수정 삭제가 가능하도록 한다.

 

먼저 express와 router 그리고 schmas의 user.js를 불러온다.

const express = require("express");
const router = express.Router();
const User = require("../schemas/user");

그리고 post로 body에서 데이터를 보내준다.

router.post("/login", async (req, res) => {
    const {Id, password } = req.body;

    //아이디가 일치하는 유저를 찾는다.
    const user = await User.findOne({ Id });

    //1.아이디가 일치하는 유저가 존재하지 않거나
    //2.유저를 찾았지만 유저의 비밀번호와 입력한 비밀번호가 다를 때
    if (!user || user.password !== password) {
        res.status(400).json({
            errorMessage: "로그인에 실패하였습니다."
        });
  
        return;
    }

body에서 Id와 password를 보내주고 Id와 password가 유효한지 확인한다.

 

그리고 로그인을 통해서 본인을 인증하기 위한 데이터를 만든다.

이 방식은 토큰 데이터와 cookie데이터를 통해서 만든다.

 

본인인증에 필요한 데이터를 토큰화 하고 그것을 쿠키데이터화 한다.

const token = jwt.sign({ userId: user.userId }, "customized-secret-key");

    res.cookie("Authorization", `Bearer ${token}`);
    res.status(200).json({ token });

});

전체적인 post의 코드는 이 두개가 합쳐진다.

router.post("/login", async (req, res) => {
    const {Id, password } = req.body;

    //아이디가 일치하는 유저를 찾는다.
    const user = await User.findOne({ Id });

    //1.아이디가 일치하는 유저가 존재하지 않거나
    //2.유저를 찾았지만 유저의 비밀번호와 입력한 비밀번호가 다를 때
    if (!user || user.password !== password) {
        res.status(400).json({
            errorMessage: "로그인에 실패하였습니다."
        });
  
        return;
    }
    //JWT를 생성
    const token = jwt.sign({ userId: user.userId }, "customized-secret-key");

    res.cookie("Authorization", `Bearer ${token}`);
    res.status(200).json({ token });

});