리셋 되지 말자

[NodeJS] Passport 인증 구현 및 자격 확인 본문

NodeJS/생활코딩

[NodeJS] Passport 인증 구현 및 자격 확인

kyeongjun-dev 2020. 9. 28. 14:56

Passport 미들웨어는 session을 이용하므로, 반드시 session 미들웨어를 use하고난 뒤에 use 하여아 한다.

 

사용 방법

 

두 가지 사용방법이 있다.

 

자격확인

app.post('/auth/login_process',
  passport.authenticate('local', { 
    successRedirect: '/',
    failureRedirect: '/auth/login' }
));

auth 라우터의 login_process를 주석처리한 뒤, main.js에 위의 코드를 추가한다. 성공하면 루트페이지, 실패하면 다시 로그인 페이지로 보내는 코드이다.

원래의 코드는 authData와 if문을 통해 로그인 여부를 결정했는데 그런 부분이 없다.

(www.passportjs.org/docs/configure/)에서 사용 법을 확인할 수 있다.

 

  • 코드 테스트
app.post('/auth/login_process',
  passport.authenticate('local', { 
    successRedirect: '/',
    failureRedirect: '/auth/login' }
));

passport.use(new LocalStrategy(
    function(username, password, done) {
    //   User.findOne({ username: username }, function (err, user) {
    //     if (err) { return done(err); }
    //     if (!user) {
    //       return done(null, false, { message: 'Incorrect username.' });
    //     }
    //     if (!user.validPassword(password)) {
    //       return done(null, false, { message: 'Incorrect password.' });
    //     }
    //     return done(null, user);
    //   });
    }
  ));

예제를 주석처리하고 웹서버를 실행한뒤 로그인을 시도하면 /auth/login 페이지에 계속 머물러 있다. 즉 'failureRedirect'가 동작하는 것이다.

 

  • Form

Form을 검색하면, form 데이터 전송 시에 name은 username과 password로 전송하도록 되어있다.

이 name 이름들을 이용하기 싫다면 아래처럼 default값을 변경할 수도 있다.

 

  • app.use(new LocalStrategy) 수정
passport.use(new LocalStrategy(
    {
        usernameField: 'email',
        passwordField: 'pwd'
    },
    function(username, password, done) {
        console.log('LocalStrategy', username, password);
    //   User.findOne({ username: username }, function (err, user) {
    //     if (err) { return done(err); }
    //     if (!user) {
    //       return done(null, false, { message: 'Incorrect username.' });
    //     }
    //     if (!user.validPassword(password)) {
    //       return done(null, false, { message: 'Incorrect password.' });
    //     }
    //     return done(null, user);
    //   });
    }
  ));

기존에 사용하던 email과 pwd 값으로 전송이 잘 되는지 확인해본다.

LocalStrategy rudwns273@naver.com 111111

결과는 위에처럼, 입력한 값이 잘 출력된다.

 

인증 기능 구현

main.js에 authData를 선언하고, 아래와 같이 코드를 작성한다

passport.use(new LocalStrategy(
    {
        usernameField: 'email',
        passwordField: 'pwd'
    },
    function (username, password, done) {
        const authData = {
            email:'rudwns273@naver.com',
            password:'12345'
        }
        console.log(username, password);
        if(username==authData.email){
            if(password==authData.password){
                console.log(1);
                done(null, authData);
            }else{
                return done(null, false, {
                    message: 'Incorrect password.'
                });    
            }
        }else{
            return done(null, false, {
                message: 'Incorrect username.'
            });
        }
    }
));

테스트를 해본다.

 

1이 출력됐으므로 우선은 성공이다. 이제 세션과 연동하여야 한다.

'NodeJS > 생활코딩' 카테고리의 다른 글

[NodeJS] Passport 로그인 확인  (0) 2020.10.05
[NodeJS] Passport 세션이용  (0) 2020.09.28
[NodeJS] Passport 설치  (0) 2020.09.28
[express] session 추가사항  (0) 2020.09.28
[express] session & auth 인증 구현  (0) 2020.09.27
Comments