2016-05-24 7 views
0

Ich habe eine einfache Anwendung, die eine Express-Sitzung verwendet. Hier ist mein Eingabeskript, wo ich die Sitzung einleite.`req.session.secret` nicht in Routen mit Express-Sitzung definiert

export const app = express(); 
export const server = Server(app); 

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 
app.use(cookieParser()); 
app.use(session({ 
    secret: "changed to nonsense string for this question", 
    resave: true, 
    saveUninitialized: true, 
    cookie: { maxAge: 60000 } 
})); 
app.use('/api/v1/auth', require('./users')); 

Nach dem documents of express-session, sollte ich in der Lage sein, dies über req.session zuzugreifen. Ich möchte den geheimen Schlüssel für die Verwendung eines JSON-Tokens innerhalb einer Route erhalten. Hier ist, was ich tue:

export const routes = Router(); 
routes.post('/login', function (req, res, next) { 
    // ... 
    const token = jwt.sign(user, req.session.secret, { expiresIn: '5m' }); 
}); 

export default routes; 

Aber es sagt immer wieder, dass die req.session.secret nicht definiert ist. Was mache ich falsch? Wie greife ich auf das Sitzungsgeheimnis innerhalb einer Route zu?

Antwort

1

secret ist Teil der Konfiguration von express-session, aber es ist nicht zugänglich durch req.session (ich denke, das ist absichtlich getan).

Wie Sie von Ihrer Route aus darauf zugreifen können, hängt davon ab, woher Sie das Geheimnis bekommen. Normalerweise stammt dies von einer Umgebungs- oder Konfigurationsvariablen und ich sehe nicht, warum Sie nicht direkt auf diese von Ihrem Routen-Handler zugreifen können.

Wenn das Geheimnis fest codiert ist und Sie es auf diese Weise beibehalten möchten, können Sie ein separates Modul dafür erstellen, das require() 'd sein kann, wo immer Sie das Geheimnis benötigen.