Published on

Login

Authors
  • avatar
    Name
    Inhwan Cho
    Twitter

login 방법

  1. Session 방법

세션은 서버에서 관리되는 사용자의 상태 정보입니다. 사용자가 웹 애플리케이션에 접속할 때, 고유한 세션 ID가 생성되고, 이 ID는 사용자의 브라우저와 서버 사이에 쿠키 형태로 주고받으며 사용됩니다.

세션 데이터는 서버의 메모리나 데이터베이스에 저장될 수 있으며, 사용자의 민감한 정보를 보다 안전하게 관리할 수 있습니다.

Session id만으로 로그인을 확인하는 방법. 유저 로그인 -> db에 아이디, 로그인날짜, 유효기간, session id들을 저장 -> 유저에게 session id만 줌(저장).

  1. 가입
  2. 로그인
  3. 로그인 완료 시 세션을 만듬(암호화하여) - 세션 backEnd가 필요 없음.
  4. 유저에게 입장권을 보내줌

장점 - 유저의 http 요청마다 로그인 상태를 확인하여 보안이 좋음

단점 - db에 부담이 많이감(고비용)

예시 코드

sessionExample.js
//서버에서 사용자의 세션 객체에 접근하는 방법입니다.
req.session.userId = 'abcd1234';

  1. Token 방식(jwt)
  1. 로그인 요청: 사용자가 자신의 로그인 정보(예: 이메일과 비밀번호)를 서버에 전송합니다.
  2. 인증 및 토큰 발급: 서버는 받은 정보를 검증하고, 유효한 경우 사용자의 정보와 함께 JWT를 생성합니다.
    이 토큰에는 일반적으로 사용자 식별자, 토큰 만료 시간, 발급자 등의 정보가 포함됩니다.
  3. 토큰 반환 및 저장: 서버는 생성된 JWT를 클라이언트에 반환하고, 클라이언트는 이 토큰을 저장합니다
    (예: 로컬 스토리지, 쿠키).
  4. 토큰을 이용한 요청: 사용자가 이후 요청을 보낼 때, 저장된 JWT를 HTTP 요청의 Authorization 헤더에 포함시켜 서버로 전송합니다.
  5. 서버의 요청 처리: 서버는 요청에 포함된 JWT를 검증하고, 유효하다면 요청된 작업을 수행합니다. 서버는 이 과정에서 JWT를 해석하여 사용자의 신원을 확인합니다.

장점 - 암호화하여 보안이 생각보다 좋고, 많은 사용자가 있을때 좋음.

단점 - token 방식은 입장을 제한하기가 힘듬


  1. OAuth

해당 사이트의 사용 권한을 타사이트에 대여해주는 로그인 방법입니다.

예 - 구글 및 페이스북으로 회원가입 및 로그인하는 방법.


Middleware

로그인 확인 기능이 각 요청 마다 필요하면 요청 함수에 각각 넣는거는 효율적이지 않습니다.

그래서 함수를 만들고, 아래와 같은 식으로 미들웨어(요청과 응답 사이에) 요청을 할 수 있습니다.


function name(request, response, next()) {
  if (request.user){
    //...
  }
  next() // 미들웨어 코드 실행이 끝난 뒤 실행되는 함수
}

// 이렇게 요청과 응답 사이에 name()이 실행되는 코드를
// middleware라고 함
app.get('/', [name(), ...], (request,response)=>{  })

app.use(name()) // 밑에 있는 모든 API가 name() 미들웨어에 등록(파일 위에 선언하는게 중요)
app.use('/url',name()) // /url 밑 하위 /url에만 등록