Passport - local/strategy 콜백완성
에러처리
(아이디가 중복되는 상황)
1 2 3 4 5 6 7 8 9 | passport.use('local-join', new LocalStrategy({ usernameField : 'email', passwordField : 'password', passReqToCallback : true }, function(req, email, password, done){ // 콜백 함수 내용 완성 } )); | cs |
post 요청이들어오면 passport가 실행되며,
passport내부 콜백 함수로 인증 절차가 진행된다.
콜백 함수 내용 완성이라고 주석 처리 된 부분에 데이터값을 받아와서
인증하는 루틴을 완성해보자
1 2 3 4 5 6 7 8 9 10 | var query = connection.query('select * from user where email = ?', [email], function(err, rows){ if(err) return done(err); if(rows.length){ console.log('exist user'); return done(null, false,{message: 'your email is already used'}) }else{ } }) | cs |
우선 다음과 같은 소스코드까지 완성한다
이 코드는 데이터베이스에 접근하여 중복된 값이 있으면
콘솔에 에러메세지를 출력하는 코드이다.
여기까지 작성 후 브라우저를 통해 제대로 동작하는지 확인해본다.
현재 데이터베이스의 user 테이블은 다음과 같고, 브라우저를 통해 이미 테이블에 있는 값을 입력하면, 콘솔에는 exist user 경고를 출력한다.
그 결과 passport.authenticate함수의 리다이렉트로 인해
인증은 실패하고 /Join으로 이동하게 된다.
1 2 3 4 5 6 7 | router.get('/', function(req, res){ var msg; var errMsg = req.flush('error'); if(errMsg) msg = errMsg; res.render('join.ejs', {'message' : msg}); }) | cs |
리다이렉트의 확인을 위해 메세지를 사용할 필요성이 있다.
따라서 get 요청이 들어왔을때 오류가 있다면 메세지를 출력하도록하자
위의 코드는 req의 flash로 넘어오는 메세지를 출력하게 한다.
1 | <section class="message"><%=message%></section> | cs |
ejs에 메세지를 받을 section도 추가해 주자
res.render에서 'message' : msg를 통해 넘어오는 값을 랜더링한다.
메일이 데이터베이스에서 중복될 경우 다음과 같은 메세지가 뜬다.
1 | return done(null, false,{message: 'your email is already used'}) | cs |
여기서 발생하는 메세지는 passport.use의 콜백함수 err처리 안에서
done내부에서 지정된 메세지가 리턴되면서 발생한다.
다른 메세지를 출력하고 싶은경우 done내부의 메세지를 수정하면 된다.
정상적인 접근에 대한 처리
1 2 3 4 5 6 | var sql = {email:email, pw:password} var query = connection.query('insert into user set ?', sql, function(err,rows){ if(err) throw error; return done(null, {'email':email,'id' :rows.insertId}) }) | cs |
다음과 같은 코드를 콜백함수 내부 else문 안에 넣어준다.
(if문은 에러에 대한 처리, else는 정상 접근에 대한 처리)
데이터베이스에 값을 입력하는 코드이다.
그러나 이 코드를 입력하는 것 만으로 데이터가 처리되지 않는다
done함수를 사용할 경우 serialize를 해줘야하는데
아직 처리가 되지 않았으므로 데이터가 저장되지 않는것이다.
그렇다면 계속해서 serialize로 세션 처리를 해주도록 하자
'개발' 카테고리의 다른 글
[NodeJS] Passport - Ajax 기반의 인증 처리 (0) | 2017.04.18 |
---|---|
[NodeJS] Passport 기반 세션처리 (0) | 2017.04.18 |
[NodeJS] Passport 기반 router 설정 (0) | 2017.04.18 |
[NodeJS] Passport - middleware/strategy 설정 (0) | 2017.04.18 |
[NodeJS] Passport 환경 구축 (0) | 2017.04.18 |
댓글