코딩/Today I Learn

12.6 공부

코딩쪼렙 2021. 12. 6. 22:16
728x90

videoController에서 Video.create했던 것처럼

userController에서 user.create하기 

우선 userController에 

import User from "../models/User";

 

export const postJoin = async(req, res) => {
    console.log(req.body);
    const {name, username, email, password ,location} =req.body;
    await User.create{(   //User create할 때는 awiat해야함 유저가 만들어질때까지 기달려야하기 때문에 + async도 
        name,
        username,
        email,
        password,
        location
    )};
    res.end();

};

유저를 생성한 다음 뭘할까?

유저를 로그인 페이지로 보내주면 될 것같음 

    res.end();

return res.redirect("/login") //라우터에 로그인페이지 url있었슴 

from을 채우고 mongodb에서 데이타 를보면 

> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB
youtube  0.000GB
> use youtube
switched to db youtube
> show collections
users
videos
> db.users.find()
{ "_id" : ObjectId("61ae07242457da9f27a4430b"), "email" : "kfjkdjf@naver.com", "username" : "1686023", "password" : "ddddfsfd", "name" : "김애옹", "location" : "dfdfsdfsdf", "__v" : 0 }

패스워드가 노출이되어있는 것을 볼 수있음 --> password hashing 해석이되지않게 보안 


pssward hashing 

일방향 함수 2121212  ->fdjflksdjieljfksdjf로 바꿔줌 

입력값으로 항상 같은 출력값이 나오지만 출력값으로 입력값을 알 수없다.

[해시함수 테스트]
https://emn178.github.io/online-tools/sha256.html

 

npm i bcrypt
https://www.npmjs.com/package/bcrypt

 

 

node bcrypt  :password hashing , rainbowtable 공격을 막아줌,

 

 

사용법 bcrypt.hash(패스워드, saltRounds몇번 해싱 할 것인지, function(err,hash){})

user를 저장하기 전에 hashing 해야함

user.js에

import bcrypt from "bcrypt"

 


userSchema.pre("save", async function () {
    console.log("Users password:", this.password);            // 여기서 this는 User.create할 때 User
    this.password = await bcrypt.hash(this.password, 5);   //await 사용하고있기 때문에 콜백함수 사용하지 않아도 됨
    console.log("Hashed password:", this.password);
});

////

Users password: dfdfdf
Hashed password: $2b$05$CReLyxZPznfHke8TfJ81k.g7C22F15iXi6NMxQVsL8EHbZxAb6fou

 

------------------------------

중복 코드 삭제하기 

$or (mongodb 기능)

    const exists = await User.exists({ $or:[ { }, { } ]});  이메일또는 유저네임 존재하는것

    xxxx const exists = await User.exists({username, email}); 이메일과 유저네임 동시에 존재하것

 

패스워드 확인

    if(password !== password2){
        return res.render("join",{
            pageTitle,
            errorMessage: "Password confirmation does not match."
        });
    }

 

https://docs.mongodb.com/manual/reference/operator/query/or/#mongodb-query-op.-or