여권과 별도의 세션 처리를 지원하는 HTTP 서버를 구현해야합니다. 그 이유는 내 고객 (계정)과 고객 (사용자)의 두 엔티티에 대한 인증이 필요하다는 것입니다. 내 아이디어는 자체 세션 미들웨어, 다른 세션 속성, 자체 여권 인스턴스 등 자신 만의 안전한 "공간"을 사용하는 것이 었습니다. 아무튼 계정에 대한 로그인 흐름 : 나는 그것을 나누기 끝에이 줄 app.use(userPassport.session())
을 추가 즉시여러 세션에서 익스프레스와 패스포트를 구성하는 방법
const express = require('express')
const session = require('express-session')
const Passport = require('passport').Passport
const userPassport = new Passport()
const accountPassport = new Passport()
// add passport strategies
const app = express()
app.use(session({
secret: config.session.secret,
//store: accountSessionStore,
resave: true,
saveUninitialized: true,
}))
app.use(accountPassport.initialize({ userProperty: 'account' }))
app.use(accountPassport.session())
app.use(userPassport.initialize({ userProperty: 'user' }))
: 난 그냥이 코드를 사용하여 사용자 계정에 대한 세션 저장소를 사용하지만 경우 잘 작동하고
더 이상 일하지 않아. Express 세션 미들웨어는 여러 개의 여권 인스턴스를 처리 할 수 없으며 마지막 호출이 인스턴스를 덮어 쓰는 것 같습니다. 이 같은 자신의 인스턴스로 계정과 고객을 포장
:
const app1 = express()
// register stuff for accounts
const app2 = express()
// register stuff for users
const rootApp = express()
rootApp.use(app1)
rootApp.use(app2)
작동하고 자신의 HTTP 서버 (및 추가 포트)를 사용하는 것이 조금 잔인한 것 같습니다하지 않았다.
을하고 하나는'(PORT)'app.listen되는 라인을 듣고 있나요? – timaschew
@ timaschew 예, 더 이상 필요하지 않습니다. Express 4.0을 사용하면 각 앱/라우터를 개별적으로 구성하여 문제를 해결할 수 있습니다. 'www/bin'에 사전 생성 된 상용구가 있습니다. 최상위 수준의 앱은 단순히 요청을 하위 라우터로 전달합니다. 나는 당신이 고객 지역과 고객 지역에 귀하의 사이트를 나눌 수 있다고 생각합니다. 논리의 나머지 부분을 구성하는 방법에 관해서는 여기에 많은 유연성이 있습니다. 두 영역 모두에 대해 동일한 경로를 매핑하고 세션에서 userProperty를 사용할 수 있습니다. – Andy
처음에는 경로 접두사가 다른 접미사와 일치하기 때문에 순서가 잘못되었지만 순서를 변경 한 후에 먼저/api/v1/user-auth로 시작하는 사용자를 등록하고 다른 모든 항목을 시작한 후에 '/ api/v1'을 사용하십시오. 감사! – timaschew