[React & NodeJS]공부#2

14172 단어 ReactnodejsReact

날짜 : 21.06.18
참고 강의

[Node.js]

1. Auth 기능 만들기

  • [index.js]에 auth route 생성
app.get('/api/users/auth', auth, (req, res) => {
    
});
  • [middleware]-[auth.js] 생성
const { User } = require("../models/User");

let auth = (req, res, next) => {
    //인증 처리를 하는 곳

    //client cookie에서 token 가져오기
    let token = req.cookies.x_auth;

    //토큰 복호화 후 유저 검색
    User.findByToken(token, (err, user) => {
        if (err) throw err;
        if (!user) return res.json({ isAuth: false, error: true });

        req.token = token;
        req.user = user;
        next();
    });
};

module.exports = { auth };
  • [models]-[User.js]에 findByToken 생성
userSchema.statics.findByToken = function (token, cb) {
    var user = this;

    jwt.verify(token, 'secretToken', function (err, decoded) {
        //유저 아이디를 이용해서 유저를 찾은 다음에 
        //클라이언트에서 가져온 token과 DB에 보관된 토큰이 일치하는지 확인
        user.findOne({ "_id": decoded, "token": token }, function (err, user) {
            if (err) return cb(err);
            cb(null, user)
        })
    })
}
  • [index.js] auth에 미들웨어 작성
const { auth } = require('./middleware/auth');

app.get('/api/users/auth', auth, (req, res) => {
    res.status(200).json({
        _id: req.user._id,
        isAdmin: req.user.role === 0 ? false : true,
        isAuth: true,
        email: req.user.email,
        name: req.user.name,
        lastname: req.user.lastname,
        role: req.user.role,
        image: req.user.image,
    });
});

2. 로그아웃

  • [index.js]에 logout router 생성
app.get('/api/users/logout', auth, (req, res) => {
    // console.log('req.user', req.user)
    User.findOneAndUpdate({ _id: req.user._id },
        { token: "" }
        , (err, user) => {
            if (err) return res.json({ success: false, err });
            return res.status(200).send({
                success: true
            })
        })
})

[React.js]

1. React 설치

npx create-react-app .

Full Code

Walang Github

Walang Notion

좋은 웹페이지 즐겨찾기