passport.session() 미들웨어는 무엇을 합니까?
간편 노드 인증을 사용하여 Passport.js를 사용하여 인증 시스템을 구축하고 있습니다. 설치 및 로컬 자습서.
나는 무엇에 대해 혼란스럽습니다.passport.session()
그렇습니다.
.express.session()
를 통해 전송되는지 헷갈립니다.passport.session()
무엇을 하고 왜 그것이 필요한가에 추가로.express.session()
.
응용 프로그램을 설정하는 방법은 다음과 같습니다.
Server.js는 응용 프로그램을 구성하고 웹 서버를 설정합니다.
//importing our modules
var express = require('express');
var app = express();
var port = process.env.PORT || 8080;
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var configDB = require('./config/database.js');
//Configuration of Databse and App
mongoose.connect(configDB.url); //connect to our database
require('./config/passport')(passport); //pass passport for configuration
app.configure(function() {
//set up our express application
app.use(express.logger('dev')); //log every request to the console
app.use(express.cookieParser()); //read cookies (needed for auth)
app.use(express.bodyParser()); //get info from html forms
app.set('view engine', 'ejs'); //set up ejs for templating
//configuration for passport
app.use(express.session({ secret: 'olhosvermelhoseasenhaclassica', maxAge:null })); //session secret
app.use(passport.initialize());
app.use(passport.session()); //persistent login session
app.use(flash()); //use connect-flash for flash messages stored in session
});
//Set up routes
require('./app/routes.js')(app, passport);
//launch
app.listen(port);
console.log("Server listening on port" + port);
passport.session()
미들웨어 역할을 수행하여 req 개체를 변경하고 현재 세션 ID인 '사용자' 값(클라이언트 쿠키에서)을 실제 역직렬화된 사용자 개체로 변경합니다.
다른 답변들은 몇 가지 좋은 점을 제시하지만, 저는 좀 더 구체적인 세부 사항을 제공할 수 있을 것이라고 생각했습니다.
app.use(passport.session());
와 동등합니다.
app.use(passport.authenticate('session'));
여기서 '세션'은 여권과 함께 번들로 제공되는 다음과 같은 전략을 말합니다.제이에스
https://github.com/jaredhanson/passport/blob/master/lib/strategies/session.js 파일에 대한 링크입니다.
이 글을 쓸 당시 다음 행을 가리키는 영구 링크:
var property = req._passport.instance._userProperty || 'user';
req[property] = user;
기본적으로 미들웨어 역할을 하며 사용자의 역직렬화된 ID를 포함하도록 req 개체의 'user' 속성 값을 변경합니다.하려면 이작업야동이포다합니함다해음을면려작올하게바르합▁to니다▁include▁must야포▁to해▁allow▁correctly▁this함이▁you.serializeUser
그리고.deserializeUser
사용자 지정 코드의 함수입니다.
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function (user, done) {
//If using Mongoose with MongoDB; if other you will need JS specific to that schema.
User.findById(user.id, function (err, user) {
done(err, user);
});
});
그러면 데이터베이스에서 올바른 사용자를 찾아 콜백에 마감 변수로 전달합니다.done(err,user);
위의 코드는 에 .passport.session()
req의 로 전달할 수.req의 'user'는 다음 미들웨어입니다.
Connector Express 기반 응용 프로그램에서 Passport.initialize() 미들웨어는 Passport를 초기화하는 데 필요합니다.프로그램에서 영구 로그인 세션을 사용하는 경우 passport.session() 미들웨어도 사용해야 합니다.
그리고.
세션
일반적인 웹 응용 프로그램에서 사용자 인증에 사용되는 자격 증명은 로그인 요청 중에만 전송됩니다.인증확인이 성공하면 사용자 브라우저의 쿠키 세트를 통해 세션이 설정되고 유지됩니다.
이후의 각 요청에는 자격 증명이 포함되지 않고 세션을 식별하는 고유한 쿠키가 포함됩니다.로그인 세션을 지원하기 위해 Passport는 세션 간에 사용자 인스턴스를 직렬화하고 역직렬화합니다.
그리고.
세션 지원을 활성화하는 것은 전적으로 선택 사항이지만 대부분의 응용 프로그램에 권장됩니다.활성화된 경우 express를 사용해야 합니다.로그인 세션이 올바른 순서로 복원되었는지 확인하기 위해 passport.session 앞에 session(session)을 입력합니다.
사용하는 동안PassportJs
로그인 URL의 일부로 사용자를 확인하려면 세션에 이 사용자 정보를 저장하고 이후의 모든 요청(예: 사용자 직렬화/직렬화)과 함께 검색할 수 있는 메커니즘이 필요합니다.
따라서 이 인증이 로그인 응답에서와 같이 데이터베이스나 oauth를 조회할 필요가 없어도 사실상 모든 요청에 따라 사용자를 인증하는 것입니다.따라서 여권은 세션 인증을 또 다른 인증 전략으로 취급할 것입니다.
그리고 이 전략을 사용하는 것 - 이름이 붙은.session
간단한 바로 가기를 사용하세요 -app.use(passport.session())
또한 이 특정 전략은 명확한 이유로 직렬화 및 역직렬화 기능을 구현해야 합니다.
세션을 인증하기만 하면 됩니다.express.session()
). 이는 다음과 같습니다.
passport.authenticate('session');
다음 코드에서 볼 수 있습니다.
https://github.com/jaredhanson/passport/blob/42ff63c/lib/authenticator.js#L233
언급URL : https://stackoverflow.com/questions/22052258/what-does-passport-session-middleware-do
'programing' 카테고리의 다른 글
jQuery를 사용하여 Click 이벤트를 동적으로 추가 (0) | 2023.07.26 |
---|---|
*ngIf를 사용하여 angular 2 템플릿에서 빈 객체를 확인하는 방법 (0) | 2023.07.26 |
단일 리스트의 쌍 (0) | 2023.07.26 |
Ajax 요청 문제: 오류 800001 (0) | 2023.07.26 |
MariaDB - 기술 통계량에 대한 왜도 및 첨도 얻기 (0) | 2023.07.26 |