2016-11-15 6 views
1

원시 로그인 기능을 빌드하고 나중에 사용할 수있는 세션을 만들려고하는지 테스트하려고합니다. 세션 데이터를 유지하기 위해 express-session과 redis를 사용하고 있습니다. 여기 내 설정은 다음과 같습니다쿠키가 Express 세션 데이터를 예상대로 반환하지 않음을 요청했습니다.

app.use(bodyParser.json()) 
app.use(bodyParser.urlencoded({extended: true})) 
app.use(express.static(path.join(__dirname, 'client/build'))) 

app.use(cookieParser(process.env.COOKIE_SECRET)) 
app.use(session({ 
    store: new redisStore({ 
    host: '127.0.0.1', 
    port: 6379 
    }), 
    secret: process.env.SESSION_SECRET, 
    cookie: {maxAge: 1800}, 
    name: 'appName', 
    resave: false, 
    saveUninitialized: false 
})) 

app.use('/', routes) 

그럼 내 로그인을 제공

router.post('/api/login', (req, res) => { 
    req.session.userId = req.body.id 
    req.session.email = req.body.email 

    //do I need to send out a cookie with the session created here? 
    res.set({'Set-Cookie': 'appSession=' + req.session.id}) 
    res.status(200).send({ 
    "message": `User ${req.body.id} logged in with cookie ${req.session.id}` 
    }) 
}) 

는 그 다음 내가 읽고 내가 다시 쿠키를 보내는 요청에 대해이 세션에 추가 할 수 있어야합니다 나의 이해이다. 내가 헤더 Cookie: appName=${sessionID}api/login 경로에서 만든 sessionID와를 사용하여 우편 배달부를 사용하여이 API에 요청을 보내고

router.post('/api/test' (req, res) => { 
    if(req.session && req.session.userId) { 
    res.status(200).send({"message": `User ID ${req.session.userId} is authenticated`}) 
    } else { 
     res.status(401).send({"message": `User ID ${req.session.id} is not authenticated`}) 
    } 
}) 

: 여기에 테스트 내 API입니다. 항상 새로운 sessionId를 만들고 401을 반환합니다.

이해가 정확합니까? 그렇다면이 예상되는 동작을 어떻게 만듭니 까?

답변

1

저는 이제 이것에 대한 답을 얻었습니다. 인터넷의 다른 출처에서 분명하지 않다고 생각되는 몇 가지 비트가있었습니다.

첫째, 당신이 내가 생성 된 세션을 발견되지 않았다 내가 express-session을 실현 이런 짓을하면 DEBUG=express-session node server.js

로 서버를 실행하여, express-session에 문제가 발생하는 경우 문제를 디버깅하는 데 유용합니다. 이는 maxAge 속성을 밀리 초가 아닌 초 단위로 설정했기 때문에 즉시 만료되었습니다. 백치.

다음 문제가있었습니다. 쿠키 파서 express-session 같은 키를 사용할 필요가 있기 때문에,

express-session cookie unsigned +1ms 
    express-session no SID sent, generating session +1ms 

이 내 세션 ID를 찾지 못하는 쿠키 파서했다 : 나는 세션을 가져 오지하려고 다음 디버그 출력을 얻었다. 다시 말하지만 꽤 되돌아왔다.

바라기를 이것은 동일한 오류를 가진 누군가를 도우려는 것입니다.