Nodejs 및 mongoDB를 사용한 인증 - 2부

에서 mongoDB 데이터베이스를 설정하고 nodejs 앱에 연결했습니다.

이 파트에서는 ​​모델을 설정하고 register 을 사용하여 입력을 수락하고 암호를 해시하는 bcrypt 끝점을 만듭니다. 시작하자.

스타터 프로젝트



이전 자습서에서 오지 않은 경우 here에서 시작 프로젝트를 가져올 수 있습니다.

사용자 모델 만들기


  • db 폴더에 파일을 만들고 이름을 지정합니다userModel.
  • 파일에서 요구mongoose

  • 
    const mongoose = require("mongoose");
    
    

  • 상수( UserSchema )를 생성하고 몽구스 스키마를 다음과 같이 할당합니다.

  • 
    const UserSchema = new mongoose.Schema({})
    
    

  • 스키마에서 필요한 2개의 필드( emailpassword )를 입력하고 다음과 같이 빈 개체를 할당합니다.

  • const UserSchema = new mongoose.Schema({
      email: {},
    
      password: {},
    })
    
    

  • 이제 일부mongoose option를 추가하여 필드의 모양 또는 작동 방식을 지정하겠습니다.

  • 
    email: {
        type: String,
        required: [true, "Please provide an Email!"],
        unique: [true, "Email Exist"],
      },
    
      password: {
        type: String,
        required: [true, "Please provide a password!"],
        unique: false,
      },
    
    

  • 마지막으로 다음 코드를 사용하여 UserSchema를 내보내겠습니다.

  • 
    module.exports = mongoose.model.Users || mongoose.model("Users", UserSchema);
    
    

    위의 코드는 다음과 같습니다. "해당 이름을 가진 사용자 테이블 또는 컬렉션이 없는 경우 생성"

    Now we have completed our model for the user, the user collection is now ready to receive the data we will pass in.


    사용자 끝점 등록


  • 설치bcrypt . 이것은 사용자로부터 받을 암호를 해시하는 데 사용됩니다.

  • 
    npm install --save bcrypt
    
    

  • bcrypt 파일 상단에 app.js 필요

  • 
    const bcrypt = require("bcrypt");
    
    

  • 데이터베이스가 필요한 줄 바로 아래에 userModel가 필요합니다.

  • 
    const User = require("./db/userModel");
    
    

  • register 줄 바로 앞에 module.exports = app; 엔드포인트를 생성합니다.

  • 
    app.post("/register", (request, response) => {
    
    });
    
    

  • 이메일과 암호를 데이터베이스에 저장하기 전에 암호를 해시합니다. 따라서 다음 코드를 사용하여 비밀번호를 해시해 보겠습니다.

  • 
    bcrypt.hash(request.body.password, 10)
      .then()
      .catch()
    
    

    위의 코드는 bcrypt에게 password로부터 받은 request body를 10번 해싱하거나 솔트 라운드를 하라고 지시하고 있습니다.

    해시가 성공하면 then 블록에서 계속 진행하고 emailhashed password를 데이터베이스에 저장하고 그렇지 않으면 catch 블록에서 오류를 반환합니다.
  • catch 블록에서 다음과 같은 오류를 반환해 보겠습니다.

  • 
       .catch((e) => {
          response.status(500).send({
            message: "Password was not hashed successfully",
            e,
          });
        });
    
    

  • then 블록에 지금 가지고 있는 데이터를 저장해 보겠습니다. userModel의 새 인스턴스를 생성하고 다음과 같이 업데이트된 데이터를 수집합니다.

  • 
    .then((hashedPassword) => {
          const user = new User({
            email: request.body.email,
            password: hashedPassword,
          });
    });
    
    

  • 다음으로 데이터를 저장합니다. 여전히 then 블록에 다음이 있습니다.

  • 
    user.save()
    
    

    그리고 그게 다야. 이쯤에서 멈추면 다 좋다. 저장은 되지만 피드백은 없습니다.
  • 피드백을 받으려면 then...catch... 블록을 사용합시다.

  • 
         user.save().then((result) => {
            response.status(201).send({
              message: "User Created Successfully",
              result,
            });
          })
          .catch((error) => {
            response.status(500).send({
              message: "Error creating user",
              error,
            });
          });
    
    

    마지막으로 register 끝점은 이제 다음과 같습니다.

    
    // register endpoint
    app.post("/register", (request, response) => {
      // hash the password
      bcrypt
        .hash(request.body.password, 10)
        .then((hashedPassword) => {
          // create a new user instance and collect the data
          const user = new User({
            email: request.body.email,
            password: hashedPassword,
          });
    
          // save the new user
          user
            .save()
            // return success if the new user is added to the database successfully
            .then((result) => {
              response.status(201).send({
                message: "User Created Successfully",
                result,
              });
            })
            // catch erroe if the new user wasn't added successfully to the database
            .catch((error) => {
              response.status(500).send({
                message: "Error creating user",
                error,
              });
            });
        })
        // catch error if the password hash isn't successful
        .catch((e) => {
          response.status(500).send({
            message: "Password was not hashed successfully",
            e,
          });
        });
    });
    
    

    끝점 테스트


  • 아직 수행하지 않은 경우 터미널에서 서버를 시작하십시오
  • .


  • 우편 배달부로 이동하여 아래와 같이 테스트합니다
  • .


  • mongoDB Atlas로 이동합니다. Collections를 클릭하면 아래와 같이 방금 추가한 데이터가 표시됩니다
  • .



    이 발을 얻은 것을 축하합니다

    결론



    이것은 이 인증 시리즈의 2부였습니다. 암호를 해시한 후 사용자를 mongoDB 데이터베이스에 추가하는 것이 얼마나 쉬운지 명확하게 보여줍니다.

    모든 코드는 here입니다.


    에베레깃 / 인증 백엔드


    이 튜토리얼에서는 nodejs 및 mongoDB를 사용하여 사용자 인증을 생성하는 방법을 설명합니다.





    다음으로 그 방법을 살펴보겠습니다.

    나와 함께있어. 난 당신이 곧 볼 수 있습니다.

    좋은 웹페이지 즐겨찾기