node+ 리액트 (21.11.15)

김도형 (르베니아)·2021년 11월 16일
0

TIL

목록 보기
29/38

node + 리액트 (cors)

이번 passport를 하여 로그인을 구현했다.

passport

처음 passport를 이용한 로컬 로그인

passport.use(
    new LocalStrategy(
      {
        usernameField: "email",
        passwordField: "password",
      },
      async (email, password, done) => {
        try {
          const query = "select * from users where email = :email";
          const isuser = await sequelize.query(query, {
            replacements: {
              email: email,
            },
            type: sequelize.QueryTypes.SELECT,
          });
          const users = isuser[0];
          if (users) {
            const salt = users.salt;
            let inpw = crypto.createHash("sha512").update(password + salt).digest("hex");
            if (inpw === users.password) {
              done(null, users);
            } else {
              done(null, false, { message: "비밀번호가 일치하지 않습니다." });
            }
          } else {
            done(null, false, { message: "가입되지 않은 회원입니다." });
          }
        } catch (error) {
          console.error(error);
          done(error);
        }
      }
    )
  );

이런식으로 passport 로컬로 로그인을 만들었다.
그리고 기본 passport의 세션을 이용한 로그인이 아닌
토큰을 이용한 로그인 시스템이니 토큰을 발급하는 부분

  passport.authenticate(
    "local",
    (authError, user, info) => {
      if (authError) {
        console.error(authError);
        return next(authError);
      }
      if (!user) {
        return res.status(400).send({ result: "fail", msg: info.message });
      }
      return req.login(user,{ session: false }, (loginError) => {
        if (loginError) {
          console.error(loginError);
          return next(loginError);
        }
        const token = jwt.sign(
          {
            id: user["userid"]
          },
          process.env.SECRET_KEY
        );
        const data = { user: user };
        return res.status(200).send({
          result: "success",
          msg: "로그인 완료.",
          token: token,
          data: data,
        });
      });
    }
  )(req, res, next);

로컬로그인구현완료..!

profile
한다. 간다. 해낸다.

0개의 댓글