[Passport.js] 시리아 레이저의 행위 조사
Node.js
에서 Express
를 사용하여 로그인 기능을 실현하였다.그래서
passport
,passport-local
를 사용했지만 그 행위의 흐름 때문에 필기가 어려웠다.serializeUser
,deserializeUser
,LocalStrategy
그들이 무엇을 하고 있는지 확인한다.결론
LocalStrategy
시작, 사용자 정보 획득세션
serializeUser
에 사용자 정보 저장deserializeUser
에서 세션에서 사용자 정보 얻기deserializeUser
운동하여 로그인 상태 유지코드
routes/auth.js
...
const passport = require('passport');
const LocalStrategy = require('passport-local');
const cookieSession = require("cookie-session");
...
passport.use(new LocalStrategy(function verify(username, password, cb) {
client
.query('SELECT * FROM users WHERE username = $1', [username])
.then(results => {
if (results.rows.length === 0) {
console.log('Results is empty. Login failed');
return cb(null, false);
}
if (results.rows[0].password !== password) {
console.log('Password wrong. Login failed');
return cb(null, false);
}
console.log('LocalStrategy called!', results.rows[0]);
return cb(null, results.rows[0]);
})
.catch(e => {
return cb(err);
})
}));
passport.serializeUser(function(user, cb) {
process.nextTick(function() {
console.log('serializer called!', user);
cb(null, { id: user.id, username: user.username });
});
});
passport.deserializeUser(function(user, cb) {
console.log('deserializer called!', user);
process.nextTick(function() {
return cb(null, user);
});
});
router.use(
cookieSession({
name: "session",
keys: ['keys'],
maxAge: 24 * 60 * 60 * 1000,
})
);
router.use(passport.session());
router.post('/login/password', passport.authenticate('local', {
successRedirect: '/images',
failureRedirect: '/login'
}));
...
저널
처리된 로그에 로그인합니다.
우선
LocalStrategy
라고 불리며 인증 논리가 실행 중입니다.이어서
serializeUser
세션에 사용자 정보가 저장되었습니다.그리고 페이지를 읽을 때마다
deserializeUser
라고 불린다.세션에서 매번 사용자 정보를 얻습니다.LocalStrategy called! { id: 1, username: 'a', password: 'a' }
serializer called! { id: 1, username: 'a', password: 'a' }
...
deserializer called! { id: 1, username: 'a' }
...
참조Reference
이 문제에 관하여([Passport.js] 시리아 레이저의 행위 조사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kazuma_soon/articles/d53dbca880a709텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)