핵심:
미들웨어 사용
= 미들웨어에서 유저정보를 빼서 라우터로 가져올 수 있음
미들웨어
사용하는게 이해가 안갔음
module.exports = (req, res, next) => {
console.log("미들웨어를 지나가유");
// 미들웨어가 확실하게 호출이 되었고, 다음 핸들러가 호출되었다는것을 확신할 수 있음.
const { authorization } = req.headers;
console.log(authorization);
// Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MTliZDk1Y 이런식으로 뜸
// 이것을 어떻게 하냐? 이 Bearer와 뒤에있는 데이터를 어떻게 가져옴?? > split 사용하자(공백스플릿)
const [tokenType, tokenValue] = authorization.split(' ');
console.log(tokenValue); // 우리가 원하는 값인지 확인해보자
if (tokenType !== 'Bearer') { // 토큰타입이 Bearer 가 아니면 탈출시키는 것이 효율적이다.
res.status(401).send({
errorMessage: '로그인 후 사용하세요',
});
return; // 이유 : 토큰타입이 Bearer가 아니면 무조건 로그인 후 사용하도록 return 처리하기.
}
try {
//try구문안에서 에러발생하면 잡아서 catch구문으로 넘겨준다.
// const decoded = jwt.verify(tokenValue, "내 비밀번호"); // decoded에는 어떤 밸류가 들어있을까?
const { userId } = jwt.verify(tokenValue, "내 비밀번호");
// Id는 고유하니까 findOne이랑 같음
User.findById(userId).exec().then((user) => {
res.locals.user = user; // locals라는 공간에 지금 로그인 시도하는 user 정보를 담는다.
next(); // 이 경우에만 next가 허용된다 !!
}); // 미들웨어에서는 넥스트가 반드시 호출되어야함. 호출안되면 예외처리 걸려서 뒤에 미들웨어까지 연결이 안댐.
// if (!user){ // 만약 토큰을 발급한 이후 탈퇴하거나 db에서 삭제되었으면(악성사용자) 에러내야함! 없다고 가정하자.
// }
} catch (error) {
res.status(401).send({
errorMessage: '로그인 후 사용하세요',
});
return; // 위와 같은 이유 : 무조건 로그인 후 사용하도록 return 처리하기.
}
};
지금 사용하는 미들웨어에서는 토큰 분리 및 user값을 담은 저장소를 선언한다.
설명하자면
Bearer gdfojknhdgfopjksgdfug4598gu4358gjh45gj845jg98354g4gj88jg 값이 있는데
있으면 이것을 split(' ')하여 둘로나누고
뒤에 있는 토큰값만 담기게 된다.
거치기전에는
그리고 유저정보는 미들웨어를 거치고 나오면
res.locals.user =
{
_id: new ObjectId("619f58ed4eaffeab45e1c0b1"),
nickname: 'gudwls5925',
password: 'wls7952310',
__v: 0
};
res.locals =
[Object: null prototype] {
user: {
_id: new ObjectId("619f58ed4eaffeab45e1c0b1"),
nickname: 'gudwls5925',
password: 'wls7952310',
__v: 0
};
>> 아래있는걸 사용해야함 (유저라는 값에 담겨있기 때문에 사용하기 쉽다?!)
예를들면 저기서 정보를 빼서고싶으면
const nickname = user.nickname;
요런식으로 . 사용한다...
'nodejs' 카테고리의 다른 글
OOP (0) | 2022.01.31 |
---|---|
ejs (html)로 유저정보 가져오기 (0) | 2021.11.26 |
location 객체 사용법만 ! (0) | 2021.11.26 |
JWT 이해 (0) | 2021.11.23 |
package.json 이해 _node.js (0) | 2021.11.22 |