본문 바로가기
Nodejs

[Node js]Passport js가 이렇게 쉽다고 ? (3)

by ★☁︎♣︎♥︎ 2022. 4. 13.
728x90
반응형
안녕하세요! CodingLog의 우동이입니다.
이번 시간에는 Passport를 아주 쉽게 사용하는 방법을 알려드리겠습니다.

저번 시간에는 Passport를 ejs로 통신하는 것으로 했는데 이번에는 React.JS와 API 통신하는 방법으로 하겠습니다.

 

저는 서버 코딩을 할 때 routes에 있는 내용들을 보시 쉽게 만들려고 합니다.

이유는 서버를 모르는 사람들도 API 통신할 때 이 부분으로 사용한다고 알 수 있게 하기 위해서인데요

routes가 MVC로 나눠져있지 않는다면,,, 모르는 사람들은 보기가 싫어지겠죠??ㅎㅎ

서론이 길었네요,,ㅎ

그럼 시작하겠습니다.

1. Routes의 auth.js를 Controller로 이동하기

저번에 했던 routes의 auth.js를 

controllers 폴더를 app.js 있는 곳에 만들고 집어넣겠습니다.

그럼 이렇게 만들어지겠네요

그리고 controllers 폴더에 authCtrl.js를 만들겠습니다.

이렇게 만들었으면 저번에 auth.js의 아래 코드를 집어넣어 보겠습니다.

// auth.js
// login
passport.authenticate('local-login', {
    successRedirect: '/',
    failureRedirect: '/auth/login',
    failureFlash: true
})

// auth.js
// register
passport.authenticate('local-signup',{
    successRedirect: '/',
    failureRedirect: '/',
    failureFlash: true
})

아래의 코드처럼 되겠네요.

'use strict'

const passport  = require('passport');
const jwtmiddle = require('../middlewares/jwt')

async function login(req, res, next) {
    await passport.authenticate('local-login', async (err, user, info) => {
        if (err) { return next(err) }
        if (user) {
            const token = await jwtmiddle.jwtCreate(user)
            res.json({ "isAuth": true, "Message": "success", "token": token })
        } else {
            res.json({ "Message": "fail" })
        }
    })(req, res, next);
}
async function registerUser(req, res, next) {
    await passport.authenticate('local-signup',
     function (err, user, info) {
        if (err) { return next(err) }
        if (user) {
            res.json({ "isAuth": false, "Message": "success" })
        } else {
            res.json({ "Message": "fail" })
        }
    })(req, res, next)
}

module.exports = {
    login,
    registerUser
}

위에서 (req, res, next)를 마직막에 하는 이유가 궁금할 텐데

이유는 functions(req, res, next) 안에 passport라는 미들웨어를 사용하는데 

passport내부에도 function을 사용하기 passport 내부 function에서 나도 (req, res, next)를 사용하고 싶다!라는 말이에요

 

이렇게 되면 json으로 받을 수 있는데 저는 auth 내부에서 사용자 정보를 token으로 만들어서 사용하고 있어요.

728x90
반응형

댓글