클라이언트
function getSelf(callback) {
$.ajax({
type: 'GET',
url: '/api/users/me',
headers: {
authorization: `Bearer ${localStorage.getItem('token')}`,
},
success: function (response) {
callback(response.user)
},
error: function (xhr, status, error) {
if (status == 401) {
alert('로그인이 필요합니다.')
} else {
localStorage.clear()
alert('알 수 없는 문제가 발생했습니다. 관리자에게 문의하세요.')
}
window.location.href = '/'
},
})
}
첫번째 라우터
router.get("/users/me", authMiddleware, async (req, res) => {
const { user } = res.locals;
res.send({
user,
});
미들 웨어
const jwt = require("jsonwebtoken");
const User = require("../schemas/user");
// 이거 3번째에 모듈로 안 넣어줘도 적용되는거 물어보기
// (req, res, authmiddlewares) 이렇게 안 해도 되는 듯
module.exports = (req, res, next) => {
const { authorization } = req.headers;
const [authType, authToken] = (authorization || "").split(" ");
if (!authToken || authType !== "Bearer") {
res.status(401).send({
errorMessage: "로그인 후 이용 가능한 기능입니다.",
});
return;
}
try {
const { userId } = jwt.verify(authToken, "my-key");
User.findById(userId).then((user) => {
res.locals.user = user;
next();
});
} catch (err) {
res.status(401).send({
errorMessage: "로그인 후 이용 가능한 기능입니다.",
});
}
};
header 부분에 authorization 밸류값에 배리어, 토큰 키값이 있는데 이걸 미들 웨어에서 스플릿으로 정리하고, 인증한다. 통과하면 next()로 넘어가고, 통과못하면 catch로 넘어가서 에러처리가 난다.
'Back > Node.js' 카테고리의 다른 글
Node.js 좋아요, MongoDB (0) | 2021.04.08 |
---|---|
Nodejs 친구목록 친구추가 (0) | 2021.04.03 |
Node.js morgan, cookieParser, static (0) | 2021.03.24 |
Node.js - express(익스프레스), middleware(미들웨어), next (0) | 2021.03.24 |
노드 내장 객체 및 모듈 (계속 추가 예정) (0) | 2021.03.24 |