ํจ์ค์๋์ ํด์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ํจ์ค์๋๊ฐ ํ๋ฌธ ๊ทธ๋๋ก ์ ์ฅ๋๊ฒ ํ์ง ์๊ณ ํด์ฑ๋ ๋ฐ์ดํฐ๋ก ๋์ ์ ์ฅํ๊ฒ ํ์ฌ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ณดํธํด์ค๋ค.
์ค๋ผํด DB๋ก ์ฌ์ฉํ์ ๋๋ ๋น๋ฐ๋ฒํธ๊ฐ DB์ ์ ์ฅ๋๋ ๊ฒ์ ๋ํด์ ์ ๊ฒฝ์ฐ์ง ์์๋๋ฐ, Node.js์ ๋ด์ฅ๋์ด์๋ ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์ด๋ ๊ฒ 1์ฐจ์ ์ผ๋ก ๋ณด์๊น์ง ์ ๊ฒฝ์จ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ค๋๊ฒ ๋ญ๊ฐ ์ข๋ค.
์ด๋ฅผ ์ํด
bcrypt ํด์ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
bcrypt : ํจ์ค์๋ ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ์ ๊ณ ์ ํค์ ์กฐํฉํ๊ฒ ํด์ค๋ค.
1) npm i bcrypt@3.0.0 -S ์ผ๋ก ์ค์น
ํ๋ผ ๊ทธ๋์ ๊ทธ๋ ๊ฒ ํ๋๋ฐ ์ค์น๊ฐ ์๋ผ์ Warning ๋ฌธ๊ตฌ ํ์ธํด๋ณด๋๊น 5.0.0 ๋ฒ์ ์ด์์ผ๋ก ์ค์นํ๋ผ๊ณ ํด์ ๊ทธ๋ฅ ์์๋ก ์ผ๋จ
npm i bcrypt@5.0.0 -S ์ผ๋ก ์ค์นํ๋ค.
2) ํด์ฑ์ ์งํํด์ผํ ๋ชจ๋์์ bcrypt ๋ชจ๋ ์์ฒญ/ํด์ฑ์ฝ๋ ์์ฑ
ํด์ฑ์ Controller์์ ์ํํ ์ ์์ง๋ง ๋ชจ๋ธ์์ Mongoose์ pre-save ํ ์ ์์ฑํ๋ ๊ฒ์ ์ถ์ฒํ๋ค๊ณ ํ๋ค.
(+ Mongoose์ pre ํน์ post ํ ์, ์ฌ์ฉ์๊ฐ DB์ ์ ์ฅ๋๊ธฐ ์ /ํ๋ก User ์ธํฐํ์ด์ค์ ์ฝ๋๋ฅผ ์คํ์ํค๊ธฐ ์ข์ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.)
๊ทธ๋์ user.js ๋ชจ๋ธ ๋ชจ๋์ ๋จผ์
const bcrypt = require("bcrypt");๋ก ์์ฒญํ๋ค์ ์๋์ ๊ฐ์ด ํด์ฑ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๋จผ์ 63ํ์ฒ๋ผ preํ ์ userSchema์ ์ถ๊ฐํ๋ค.
66ํ์ bcrypt.hash ๋ฉ์๋๋ ํจ์ค์๋์ ์ซ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.
์ซ์๋ ํจ์ค์๋ ํด์ฑ์์์ ๋ณต์ก๋๋ฅผ ์๋ฏธํ๋ฉฐ ๋ณดํต 10์ ์ค๋ค.
ํด์ฑ์ด ์๋ฃ๋๋ฉด ํ๋ผ๋ฏธ์ค ์ฒด์ธ์ ๋ค์ ๊ฒฐ๊ณผ์ธ hash(ํด์๋ ํจ์ค์๋)๋ฅผ ๋ฐ๊ฒ ๋๋ค.
hash๋ฅผ ์ฌ์ฉ์ ํจ์ค์๋์ ํ ๋นํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
76ํ์ passwordComparison์ userSchema์ ์ฌ์ฉ์ ์ ์ ๋ฉ์๋๋ก ์ ์ํ๋ค.
ํผ์์ ๋ฐ์์จ password ๊ฐ๊ณผ ํด์ฑ๋ ํจ์ค์๋๋ฅผ ๋น๊ตํ๋ค.
๋น๋๊ธฐ๋ก ์ด ๊ณผ์ ์ ์คํํ๊ธฐ ์ํด์ bcrypt๋ก ํ๋ผ๋ฏธ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
bcrypt.compare๋ ์ฌ์ฉ์์ ํจ์ค์๋์ inputPassword์์ ๋น๊ต ๊ฒฐ๊ณผ๋ฅผ ์ฐธ/๊ฑฐ์ง์ผ๋ก ๋๋ ค์ฃผ๋ ๋ฉ์๋์ด๋ค.
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์ง๋๊ณ ์ด์ ์ปจํธ๋กค๋ฌ์์ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ค.
์ด๋ ๊ฒ ์์ ํ๋๋ฐ, ์ ๋๋ก ๋์๊ฐ์ง ์์์ ์์ ์ค์ด๋ค. (2021.11.09 16:45)
์ผ๋จ DB์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ๋ชจ์ต์ ๋ณด๋ฉด,
id/password๋ฅผ chun/chun์ผ๋ก ํด์ ๋ฑ๋กํ๋๋ฐ ์ ๋ ๊ฒ ํจ์ค์๋๋ ํด์ฑ๋ ๊ฐ์ด ์ ์ฅ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
๊ทผ๋ฐ ์ ๋ ๊ฒ ์ด๋ฉ์ผ์ ๋ณด๋ฉด validator๋ฅผ ์ ์ฉํ๋๋ฐ๋ ์ฌ๋ฐ๋ฅด์ง ์์ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ์ ์ฅ๋๋ค...ใ
express-validator๋ก ์ ํจ์ฑ ์ฒดํฌ ๋ฏธ๋ค์จ์ด ์ถ๊ฐ
express-validator๋ ์ ์ ๋ฐ์ดํฐ๊ฐ ํน์ ํ์์ ๋ฐ๋ฅด๋์ง ํ์ธํ๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์์ ํด ์ํ์ง ์๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ ์ ์๊ฒ ํ๋ค.
npm i express-validator -S ๋ช ๋ น์ผ๋ก ์ค์นํ๋ค.
์ ํจ์ฑ์ ์ฒดํฌํ๋ ๋ฐฉ๋ฒ์๋ validator์ sanitizer๊ฐ ์๋๋ฐ,
- Validator(๋ฐธ๋ฆฌ๋ฐ์ดํฐ) : ์ ์ ๋ฐ์ดํฐ๊ฐ ์ผ์ ๊ธฐ์ค์ ๋ง์กฑํ๋์ง ์ฒดํฌ (๋ฐ์ดํฐ ํ์ง ์ฒดํฌ)
- Sanitizer(์๋ํ์ด์ ) : ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ์ฅํ๊ธฐ ์ ์ ๋ถํ์ํ ๋ฐ์ดํฐ์ ์ญ์ ๋ ํ์ ์บ์คํ ์ํ (๋ฐ์ดํฐ ์ ๋ฆฌ)
ํ์๊ฐ์ ๋ก์ง์ ๋ด๋นํ๋ registerController.js์ express-validator๋ฅผ ์ถ๊ฐํ๋ค.
์ด๋ฉ์ผ์ด ํ์์ ๋ง๋์ง, ํจ์ค์๋ ํผ์ด ๋น์ด์์ง ์์์ง ๊ฒ์ฌํ๊ณ getValidationResult์์ ์ ํจ์ฑ ์ฒดํฌ ๊ฒฐ๊ณผ๋ฅผ ์์งํ๋ค์ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ค์ ๋ฏธ๋ค์จ์ด ํจ์๋ฅผ ํธ์ถํ๋ค.
์ฑ ์ ๋์์๋ ๋๋ก ๋ค ์ ์ง ๊ฒ ๊ฐ์๋ฐ, ์ ํจ์ฑ ๊ฒ์ฆ์ด ์ ์๋จนํ๋ค... ๋ด์ผ ๋ค์ ๊ณ ์ณ๋ด์ผ๊ฒ ๋ค.
์ด๋ฐ ์ค๋ฅ๊ฐ ๋๋๋ฐ, ์ธํฐ๋ท์ ๊ฒ์ํด๋ณด๋ฉด ์ ๋ฐ ์ค๋ฅ๊ฐ ๋๋๊ฒ ๋ชจ๋์ ๋ฒ์ ์ฐจ์ด์ผ ์ ์๋ค๊ณ ํ๋ค. ๊ทธ๋์ ๊ณ์ uninstallํ๊ณ ๋ค์ ๊น๊ณ ๋ฐ๋ณตํ๋๋ฐ๋ ์๊ณ ์ณ์ ธ์ ํฌ๊ธฐํ๋ค... ๋ค์ passport๋ผ๋ ๋ชจ๋์ ์ฌ์ฉํด์ ๋ ์ด๋ฐ ๋น์ทํ ๊ฒ์ฆ์ ํ๋๊ฒ ์๋๋ฐ ๊ทธ๊ฑธ๋ก ํด๋ด์ผ๊ฒ ๋ค.
'โ๏ธ 21-2 IPP > Node.js study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TypeScript? Vue.js? React.js? (0) | 2021.11.18 |
---|---|
Node.js - 20 Passport.js, ์ฌ์ฉ์ ์ธ์ฆ, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ (0) | 2021.11.10 |
Node.js - 18 ์ธ์ ๊ณผ ํ๋์ ๋ฉ์์ง, ์ฌ์ฉ์ ๊ณ์ ์ธ์ฆ (0) | 2021.11.08 |
Node.js - 17 ๋ฐ์ดํฐ ๋ชจ๋ธ ๊ฐ์ (+๊ฐ์ ์์ฑ, ์ก์ ) (0) | 2021.11.04 |
Node.js - 16 ์ปจํธ๋กค๋ฌ์ ๋ชจ๋ธ๊ณผ์ ์ฐ๊ฒฐ (0) | 2021.11.03 |
๋๊ธ