매거진 유저 인증

Passport Local 인증(1)

by 이종복

이번 글에서는 Passport로 Local authentication을 하는 과정을 다뤄보겠습니다.

Local authentication이란 통상적인 인증 방법인 이메일과 Password를 통한 인증을 의미합니다.


1) 우선, User.js라는 파일을 생성하고, 다음과 같은 코드를 추가해줍니다.

각 코드의 의미는 다음과 같습니다.


import mongoose from "mongoose": MongoDB를 활용하기 위해 mongoose를 import 합니다.

const UserSchema ~ : User Schema를 만듭니다.

User Schema에는 name, email, avatarUrl, facebookId, githubId

가 포함됩니다. 여기서 유저의 facebookId와 githubId를 확보함으로써

중복 가입을 방지할 수 있습니다.

const model = mongoose.model("User", UserSchema) : 'User' model을 생성합니다.

export default model: 생성된 'User' model을 export 합니다.

hello298.png


2) 다음은 init.js로 이동해서 import "./models/User"를 추가해줍니다.

이를 통해 app이 실행될 때, User model도 같이 실행되게 됩니다.

hello299.png


3) 다음은

(1) npm install passport-local-mongoose passport-local-mongoose 패키지를 설치합니다.

이를 통해 passport를 이용한 사용자 인증을 구현할 수 있습니다.

이것이 패스워드 설정, 패스워드 확인 등을 자동으로 해줍니다.


(2) import passportLocalMongoose from "passport-local-mongoose";

로 설치한 패키지를 import 합니다.

앞에 있는 이름은 바뀌어도 상관 없지만 뒤의 이름은 꼭 지켜주어야 합니다.

hello300.png


4)

(1) 새로운 Plugin을 추가해줍니다. 새로 추가할 plugin은 passportLocalMongoose 입니다.

Passport-Local Mongoose는 Mongoose plugin으로서

Passport로 username 그리고 password로 로그인하는 것을 쉽게 합니다.

여기서 Passport-Local Mongoose가 하는 역할은

자동적으로 password의 hashing과 salting을 관리하는 것입니다.


Hashing이란? 하나의 문자열을 원래의 것을 상징하는 더 짧은 길이의 값이나 키로 변환하는 것

Salting이란? Hash함수의 input에 랜덤한 데이터를 더함으로써 고유한 결과값을 보장하는 것


(참조 1) User Authentication with Passport.js

https://mherman.org/blog/user-authentication-with-passport-dot-js/

(참조 2) Adding Salt to Hashing: A Better Way to Store Passwords

https://auth0.com/blog/adding-salt-to-hashing-a-better-way-to-store-passwords/)


the expression refers to adding random data to the input of a hash function to guarantee a unique output,


그리고

hello446.png


(2) usernameField는 username이 될 Field를 명시해주며, 이 경우에는 "email"로 설정합니다.

username 같은 경우는 사용자가 그걸 변경하게 되면 이게 맞느냐 틀리느냐를 확인하는데

굉장히 번거롭기 때문에 email과 같은 field를 사용하는 것이 좋습니다.

hello301.png


5) User.js 파일을 만들었다고 해서 인증이 된 것은 아닙니다.

이제 새로운 파일인 passport.js를 만들어줍니다.

여기에 실제 사용자 인증과 관련한 기능을 구현할 것입니다.

hello302.png


6) 여기에 npm install passport passport-local 으로

passport와 passport-local이라는 2개의 패키지를 설치합니다.

passport-local은 username과 password를 쓰는 사용자 인증 방식(strategy)입니다.

나중에는 passport-github, passport-facebook과 같은 것도 가져다 쓸 것입니다.

hello303.png


7) 다음은

(1) import passport from "passport"와 import User from "./models/User"를 하고 나서,

passport.use() 를 통해 passport에게 strategy를 사용하라고 말해줍니다.


(2) strategy는 로그인 하는 방식입니다. 예를 들어 페이스북으로 로그인하기, 깃헙으로 로그인하기,

username과 password로 로그인 하기 등입니다.

이 경우에는 passport-local이 제공하는 strategy,

즉 username과 password를 쓰는 strategy를 사용합니다.

hello305.png


8) passport.use(User.createStrategy())를 통해서 strategy를 사용할 수 있습니다.

User.createStrategy()는 아래 두번째 그림에 여러 줄로 표현되는 코드를

한 줄로 실행할 수 있도록 해줍니다. 즉, 지름길인 셈입니다.

hello306.png
hello447.png
hello307.png


나머지 내용은 다음 글에 이어서 설명하도록 하겠습니다.


"다음은 노마드코더(https://academy.nomadcoders.co/)의 [초급 풀스택] 유튜브 클론 코딩 강의를 참고하였습니다."

keyword
매거진의 이전글Passport 기초