๐Bcrypt๋?
> ๋ณด๋ผ ๋๋ ์ ๋ณด ๊ทธ๋๋ก ๋ณด๋ด์ง๋ง ์ํธํํด์ DB์ ์ ์ฅํ ์ ์์.
> Register Route์์, ์ ์ ์ ๋ณด๋ค(Account, Password ๋ฑ)์ DB์ ์ ์ฅํ๊ธฐ ์ !์ด ์ํธํํ ํ์ด๋ฐ.
> Bcrypt๋ฅผ ์ด์ฉํด ๋น๋ฐ๋ฒํธ ์ํธํํ๋ ค๋ฉด salt๋ฅผ ์์ฑํด์ผ ํจ.
๐๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ
- DB์์ ์์ฒญํ E-mail ์ฐพ๊ธฐ
- DB์์ ์์ฒญํ E-mail์ด ์๋ค๋ฉด ๋น๋ฐ๋ฒํธ๊ฐ ๊ฐ์์ง ํ์ธ
- ๋น๋ฐ๋ฒํธ๊ฐ ๊ฐ๋ค๋ฉด Token ์์ฑ
- ์์ฑํ Token์ Cookie์ ์ ์ฅ
(*Token์ Cookie, Local Storage, Session Storage ๋ฑ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๊ณต๊ฐ์ ์ ์ฅํ ์ ์๋๋ฐ, ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์๋ค. ์ฌ๊ธฐ์๋ Cookie์ ์ ์ฅ)
//index.js
app.post('/login', (req, res)=>{
//์์ฒญ๋ ์ด๋ฉ์ผ์ ๋ฐ๋ฒ ์์ ์ฐพ์
User.findOne({ email: req.body.email }, (err, user)=> {
if(!user){
return res.json({
loginSuccess: false,
message: "์ ๊ณต๋ ์ด๋ฉ์ผ์ ํด๋นํ๋ ์ ์ ๊ฐ ์์."
})
}
//๋ฐ๋ฒ ์ ์๋ค๋ฉด ๋น๋ฐ๋ฒํธ๊ฐ ๋ง๋ ๋น๋ฐ๋ฒํธ์ธ์ง ํ์ธ
user.comparePassword(req.body.password, (err, isMatch)=> {
//๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆฌ๋ค๋ฉด
if (!isMatch)
return res.json({ loginSuccess: false, message: "๋น๋ฐ๋ฒํธ๊ฐ ํ๋ฆผ." })
//๋น๋ฐ๋ฒํธ๊น์ง ๋ง๋ค๋ฉด Token ์์ฑ
//index.js์์ User์ ๋ฃ์ด์ค ๊ฒ์ด user๋ก ๋ค์ด์ด.
user.generateToken((err, user)=>{
if(err) return res.status(400).send(err); //status(400) : err์๋ค!->send!
//Token์ Cookie์ ์ ์ฅ (cookie-parser ์ด์ฉ)
res.cookie("x_auth", user.token)
.status(200)
.json({ loginSuccess: true, userId: user._id})
})
})
})
})
๐Token ์์ฑ with jsonwebtoken
* ์ฐธ๊ณ : jsonwebtoken - npm
//User.js
userSchema.methods.comparePassword = function(plainPassword, cb){
bcrypt.compare(plainPassword, this.password, function(err, isMatch){
if(err) return cb(err);
cb(null, isMatch)
})
}
userSchema.methods.generateToken = function(cb){
//jsonwebtoken์ ์ด์ฉํด token ์์ฑํ๊ธฐ
var user=this;
var token=jwt.sign(user._id.toHexString(), 'secretToken') //_id: mongoDB์ user collenction์ id
//user._id + 'secretToken' = token ์ด๋ฏ๋ก 'secretToken'์ ๋ฃ์ผ๋ฉด user._id๋ฅผ ์ป์ ์ ์์
//์์ฑํ Token์ User์ ๋ฃ์ด์ค.
user.token=token
user.save(function(err, user){
if(err) return cb(err)
cb(null, user)
})
}
* 'secretToken'์ ์์์ ๋ฌธ์์ด
๐์ค๋ฅํด๊ฒฐ
- ์ค๋ฅ๋ฉ์ธ์ง
'Expected "payload" to be a plain object.'
Token ์์ฑํ ๋ user._id๊ฐ plain object๋ก ๋ค์ด์์ผ ํ๋๋ฐ ๊ทธ๊ฒ ์๋๋ค ?!
- ํด๊ฒฐ๋ฐฉ๋ฒ
var token=jwt.sign(user._id.toHexString(), 'secretToken')
'Web > Basic (Back-end)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[#9] ๋ก๊ทธ์์ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2021.06.26 |
---|---|
[#8] Authentication ๊ธฐ๋ฅ ๊ตฌํ (Auth Route ๋ง๋ค๊ธฐ) (0) | 2021.06.26 |
[#6] ๋น๋ฐ ์ค์ ์ ๋ณด ๊ด๋ฆฌ (0) | 2021.06.26 |
[#5] Nodemon ์ค์น (0) | 2021.06.26 |
[#4] Body-parser & Postman (0) | 2021.06.26 |