이번 글에서는 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 합니다.
2) 다음은 init.js로 이동해서 import "./models/User"를 추가해줍니다.
이를 통해 app이 실행될 때, User model도 같이 실행되게 됩니다.
3) 다음은
(1) npm install passport-local-mongoose로 passport-local-mongoose 패키지를 설치합니다.
이를 통해 passport를 이용한 사용자 인증을 구현할 수 있습니다.
이것이 패스워드 설정, 패스워드 확인 등을 자동으로 해줍니다.
(2) import passportLocalMongoose from "passport-local-mongoose";
로 설치한 패키지를 import 합니다.
앞에 있는 이름은 바뀌어도 상관 없지만 뒤의 이름은 꼭 지켜주어야 합니다.
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,
그리고
(2) usernameField는 username이 될 Field를 명시해주며, 이 경우에는 "email"로 설정합니다.
username 같은 경우는 사용자가 그걸 변경하게 되면 이게 맞느냐 틀리느냐를 확인하는데
굉장히 번거롭기 때문에 email과 같은 field를 사용하는 것이 좋습니다.
5) User.js 파일을 만들었다고 해서 인증이 된 것은 아닙니다.
이제 새로운 파일인 passport.js를 만들어줍니다.
여기에 실제 사용자 인증과 관련한 기능을 구현할 것입니다.
6) 여기에 npm install passport passport-local 으로
passport와 passport-local이라는 2개의 패키지를 설치합니다.
passport-local은 username과 password를 쓰는 사용자 인증 방식(strategy)입니다.
나중에는 passport-github, passport-facebook과 같은 것도 가져다 쓸 것입니다.
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를 사용합니다.
8) passport.use(User.createStrategy())를 통해서 strategy를 사용할 수 있습니다.
User.createStrategy()는 아래 두번째 그림에 여러 줄로 표현되는 코드를
한 줄로 실행할 수 있도록 해줍니다. 즉, 지름길인 셈입니다.
나머지 내용은 다음 글에 이어서 설명하도록 하겠습니다.
"다음은 노마드코더(https://academy.nomadcoders.co/)의 [초급 풀스택] 유튜브 클론 코딩 강의를 참고하였습니다."