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

이것은 Nodejs와 mongoDB를 사용한 이 인증 시리즈의 마지막 부분입니다. 빠르게 확인하시려면 를 확인하세요.

이 자습서에서는 사용자가 인증(로그인)될 때까지 일부 경로를 보호하는 방법을 살펴보겠습니다. 나와 함께있어.

시작 프로젝트



이 자습서의 시작 프로젝트는 얻을 수 있습니다here.
  • 터미널을 열고 git clone --branch login-endpoint https://github.com/EBEREGIT/auth-backend를 실행합니다.
  • cd auth-backend 폴더로 이동합니다.
  • 실행 npm install .
  • 실행 nodemon index . 그러면 서버가 시작됩니다
  • .

    엔드포인트 2개 만들기



    인증 작동 방식을 표시하려면 2개의 엔드포인트가 필요합니다. 다음 끝점을 복사하여 마지막 줄 바로 앞에 app.js 파일에 붙여넣습니다.

    // free endpoint
    app.get("/free-endpoint", (request, response) => {
      response.json({ message: "You are free to access me anytime" });
    });
    
    // authentication endpoint
    app.get("/auth-endpoint", (request, response) => {
      response.json({ message: "You are authorized to access me" });
    });
    


    엔드포인트가 Postman 또는 브라우저에서 작동하는지 자유롭게 확인하십시오.

    인증 기능 만들기



    여기서는 사용자가 인증될 때까지 특정 끝점을 보호할 수 있는 기능을 만들고 있습니다.
  • 루트 디렉토리에 파일을 만들고 이름을 지정합니다auth.js
  • 파일 상단에 가져오기jasonwebtoken

  • 
    const jwt = require("jsonwebtoken");
    
    


  • 인증 코드가 있을 비동기 함수를 만들고 내보냅니다.

  • 
    module.exports = async (request, response, next) => {
    
    }
    
    


  • 함수에서 try...catch... 블록을 사용하여 사용자가 로그인했는지 확인합니다.

  • 
        try {
    
        } catch (error) {
            response.status(401).json({
                error: new Error("Invalid request!"),
              });
        }
    
    


  • try{} 블록에서 authorization header에서 인증 토큰을 가져오겠습니다.

  • 
    //   get the token from the authorization header
        const token = await request.headers.authorization.split(" ")[1];
    
    


  • 다음으로 생성된 토큰이 처음에 입력한 토큰 문자열(RANDOM-TOKEN)과 일치하는지 확인합니다.

  • 
    //check if the token matches the supposed origin
        const decodedToken = await jwt.verify(
          token,
          "RANDOM-TOKEN"
        );
    
    


  • 다음으로 decodedToken의 세부 정보를 user 상수로 전달합니다.

  • 
    // retrieve the user details of the logged in user
        const user = await decodedToken;
    
    


  • 다음과 같이 끝점에 user를 전달합니다.

  • 
    // pass the the user down to the endpoints here
        request.user = user;
    
    


    마지막으로 다음과 같이 끝점으로 가는 길을 엽니다.

    
    // pass down functionality to the endpoint
        next();
    
    


    Our auth.js file now looks like this:



    
    const jwt = require("jsonwebtoken");
    
    module.exports = async (request, response, next) => {
      try {
        //   get the token from the authorization header
        const token = await request.headers.authorization.split(" ")[1];
    
        //check if the token matches the supposed origin
        const decodedToken = await jwt.verify(token, "RANDOM-TOKEN");
    
        // retrieve the user details of the logged in user
        const user = await decodedToken;
    
        // pass the the user down to the endpoints here
        request.user = user;
    
        // pass down functionality to the endpoint
        next();
    
      } catch (error) {
        response.status(401).json({
          error: new Error("Invalid request!"),
        });
      }
    };
    
    


    엔드포인트 보호



    이것은 최종적이고 간단한 단계입니다. 다음과 같이 인증 기능을 app.js 파일로 가져오는 것으로 시작합니다.

    
    const auth = require("./auth");
    
    


    이제 app.js 파일의 인증 끝점으로 이동하여 auth를 두 번째 인수로 추가합니다.

    
    // authentication endpoint
    app.get("/auth-endpoint", auth, (request, response) => {
      response.json({ message: "You are authorized to access me" });
    });
    
    


    그리고 그게 다야. 그것이 우리가 그 경로를 보호하기 위해 필요한 전부입니다. 테스트해 봅시다

    테스트



    If the user is not logged in





    If the user is logged in


  • 로그인 다음과 같이:


  • 토큰 복사
  • postman에서 새 탭 열기
  • 인증 유형
  • 에서 bearer token를 선택합니다.
  • token 필드에 토큰을 붙여넣고 요청
  • 을 보냅니다.



    CORS



    마지막 한가지!

    CORS 오류를 처리해야 합니다. 이렇게 하면 프런트엔드의 사용자가 아무 문제 없이 생성한 API를 사용할 수 있습니다.
  • 이렇게 하려면 app.js 파일
  • 로 이동합니다.
  • dbConnect() 줄 바로 아래에 다음 코드를 추가합니다.

  • 
    // Curb Cores Error by adding a header here
    app.use((req, res, next) => {
      res.setHeader("Access-Control-Allow-Origin", "*");
      res.setHeader(
        "Access-Control-Allow-Headers",
        "Origin, X-Requested-With, Content, Accept, Content-Type, Authorization"
      );
      res.setHeader(
        "Access-Control-Allow-Methods",
        "GET, POST, PUT, DELETE, PATCH, OPTIONS"
      );
      next();
    });
    
    


    그리고 이것으로 당신은 nodejs 인증 챔피언입니다!!!

    결론



    이 부분에서는 nodejs 및 mongoDB를 사용한 인증에 대한 이 시리즈를 마무리합니다. 등록 및 로그인 끝점을 만드는 방법과 적절하다고 판단되는 경우 끝점에서 보호를 만드는 방법을 살펴보았습니다.

    모든 코드를 찾았습니다here.

    다음으로 에 대해 살펴보겠습니다. 곧 봐요

    좋은 웹페이지 즐겨찾기