passportによるログインの実装
概要
passportはノードの認証ミドルウェアです.
Webアプリケーションは、次の方法でログインできます.
passportは、ポリシー(Strategy)と呼ばれる認証メカニズムを用いて、それぞれのログイン方法を実現する.
資格認定
app.post('/login', passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
またはコールバック関数の内部passportです.authenticate()を呼び出すことができます.app.post('/login', (req, res, next) => {
passport.authenticate('local', (err, user, info) => {
// code
return req.login(user, callback);
}) (req, res, next);
});
passport.authenticate()の2番目のパラメータのコールバック関数をカスタムコールバックと呼びます.
custom callbackを使用しないと自動的にreqされます.loginは呼び出されますが、custom callbackを使用すると直接reqします.login()を呼び出す必要があります.Customcallbackのパラメータは、「local」から呼び出されたdone関数から来ます.
passport.authenticate()はミドルウェアオブジェクトを返すので、リクエスト応答サイクルを維持するために(req,res,next)を末尾に貼り付ける必要があります.
Strategy
// index.js
const passport = require('passport');
const local = require('./localStrategy');
const kakao = require('./kakaoStrategy');
module.exports = () => {
local();
kakao();
}
// app.js
const passportIndex = require('./passport');
passportIndex();
localStrategy
// localStrategy.js
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy((username, password, done) => {
// code
}));
New LocalStrategy()の最初のパラメータコールバック関数をverify callbackと呼びます.verify callbackは、ログイン要求の認証情報を確認するために、ログイン認証情報をパラメータとして受け入れます.
verify callbackはdone関数を呼び出すことができ、done()のパラメータはerrorの順で、成功した場合はflash message(失敗した場合はmessage)です.Flash messageはオプションです.
return done(null, user) // 자격이 유효한 경우
return done(null, false, { message: 'incorrect password' }) // 실패한 경우
serializeUser
passport.serializeUser((user, done) => {
return done(null, user.id);
});
deserializeUser
passport.deserializeUser((id, done) => {
User.findOne({ where: { id } })
.then(user => done(null, user))
.catch(err => done(err));
});
ブラウザがセッションクッキー(リクエスト)appを送信する場合.jsのパスポート.session()ミドルウェアはidを識別し、idを伝達するために逆シーケンス化ユーザを実行する.逆シーケンス化ユーザーは、このidを使用してデータベースをクエリーします.
復元されたユーザ情報はreqである.ユーザーとしてアクセスできます.さらにisAuthenticated propertyがtrueに変更されました.
app.js
app.use(passport.initialize()); // passport 초기화
app.use(passport.session()); // 영구 로그인세션 사용시
Reference
この問題について(passportによるログインの実装), 我々は、より多くの情報をここで見つけました https://velog.io/@yonghoney/passport로-로그인-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol