Javascript/Node.js and Express
Login, Token(JWT) and Authentication
insub4067
2021. 7. 15. 17:41
app.js
const jwt = require("jsonwebtoken");
const secretKey = 'ThisIsSecretKey';
const User = require("../models/user");
//로그인
router.post('/login', async (req, res) => {
const { loginid, password } = req.body;
const user = await User.findOne({ $and :
[{ loginid: loginid}, {password : password }] })
if (!user) {
res.status(401).send({ errorMessage: '로그인에 실패했습니다. ' });
return;
}
const token = jwt.sign(
{ loginid: user.loginid, username: user.username },
secretKey
);
res.send({ token });
})
//토큰확인
router.get('/auth', authMiddleware, async (req, res) => {
const user = res.locals.user;
res.send({ loginid: user.loginid })
});
authMiddleware.js
const jwt = require("jsonwebtoken");
const User = require("../models/user");
module.exports = async(req, res, next) => {
const { authorization } = req.headers;
const [tokenType, tokenValue] = authorization.split(" ");
if(tokenType !== 'Bearer'){
res.status(401).send({
errorMessage: '로그인 후 사용하세요'
});
return;
};
try {
const { loginid } = jwt.verify(tokenValue, "ThisIsSecretKey")
const foundUser = await User.findOne({ loginid })
res.locals.user = foundUser;
next();
} catch (error) {
res.status(401).send({
errorMessage: '로그인 후 사용하세요'
});
return;
}
};