250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 장고
- 블로그만들기
- Node js
- androidstudio
- Django
- 파이썬
- java
- 리액트
- 중국어
- react
- PYTHON
- 자바
- 안드로이드
- MernStack
- 개발
- 자바스크립트
- 안드로이드스튜디오
- 안드로이드 스튜디오
- es6
- javascript
- 중국어입문
- nodejs
- Android Studio
- 입문
- 알고리즘
- 블로그 만들기
- Android
- mongodb
- mern Stack
- express
Archives
- Today
- Total
City At Night
[MernStack] Blog 만들기 9. auth Router (로그인 , 로그아웃 기능) 본문
728x90
반응형
이제는 로그인과 관련된 라우터를 만들겠다.
사용자가 입력한 아이디와 패스워드를 서버로 전송하고
서버에서는 저장되어 있는 아이디와 패스워드를 비교하여
일치하면 토큰값과 로그인 성공 응답을 보내주고,
일치하지 않 으면 에러 메세지를 띄워 로그인 실패 응답을 보내준다.
이에 관련한 auth Router를 만들겠다.
1.auth.js 라우터 생성
routes/api 폴더에 auth.js를 생성한다
<auth.js>
import express from "express";
import bcrypt from "bcryptjs";
import jwt from "jsonwebtoken";
import auth from "../../middleware/auth";
import config from "../../config/index";
import {JWT_SECRET} = config;
//model
import User from "../../models/user";
const router = express.Router();
// @route POST api/auth
// @desc Auth user
// @access Public
router.post("/", (req,res) => {
const {email, password } = req.body; // req.body에 사용자가 입력한 아이디와 패스워드를 보낸다.
//Simple Validation
if(!email || !password) {
return res.status(400).json({msg : "모든 필드를 채워주세요 "});
} // 둘중 하나라도 채우지 않으면 에러메세지를 띄운다
//check for existing user
User.findOne({email}).then((user) => {
if(!user) return res.status(400).json({msg: "존재하지 않는 유저입니다. "});
//validate password
bcrypt.compare(password, user.password).then(isMatch) => {
if(!isMatch)
return res.status(400).json({msg : "비밀번호가 일치하지 않습니다. "})
// 로그인 성공시 ...
jwt.sign(
{ id : user.id},
JWT_SECRET,
{ expiresIn : "2 days"}, //토큰의 유효기간은 2달로 지정
(err, token) => {
if (err) throw err;
res.json({
token,
user:{
id: user.id,
name : user.name,
email : user.email,
role: user.role,
}
})
}
)
}
})
})
export default router;
2. auth Router 사용하기위해 app.js에 등록
<app.js>
import authRoutes from './routes/api/auth';
//....
app.use('/api/auth', authRoutes)
3. 포스트맨으로 테스트
전전 포스팅에서 가입한 아이디와 패스워드를 입력하고 auth 주소로 POST요청을 하면 토큰값과 user정보를 보내준다.
4.로그아웃 기능 만들기
<auth.js>
router.get("/user", auth, async (req, res) => {
try {
const user = await User.findById(req.user.id).select("-password");
if (!user) throw Error("유저가 존재하지 않습니다");
res.json(user);
} catch (e) {
console.log(e);
res.status(400).json({ msg: e.message });
}
});
export default router 위에 추가 해준다.
5. 포스트맨에서 테스트
로그인했을때 받은 토큰값을 넣어 GET요청을 하면 아래와 같이 회원정보가 나오면 성공이다.
728x90
반응형
'MernStack' 카테고리의 다른 글
[MernStack] Blog 만들기 11. Front에 사용할 라이브러리 설치(Redux) (0) | 2021.05.06 |
---|---|
[MernStack] Blog 만들기 10. Front작업, React 설치 (0) | 2021.05.05 |
[MernStack] Blog 만들기 8. auth Middleware (0) | 2021.03.29 |
[MernStack] Blog 만들기 7. Routing-user기능 // 코드수정필요(미완성) (0) | 2021.03.22 |
[MernStack] Blog 만들기 6. Poster Router 잘 되는지 테스트 (0) | 2021.03.14 |
Comments