Skip to main content
 首页 » 编程设计

express之使用 Passport.js 和 Express-Session 作为中间件在 NodeJS 应用程序中获取 "TypeError: Secret string must be provided."

2024年02月20日150cyq1162

有人可以向我解释中间件在哪里需要 secret 字符串吗? 另外,如果我在 Passport.session 选项中设置 key /值对,我仍然收到相同的错误消息

这是代码

    // using pug since a view engine is required by express 
    app.set('views', __dirname) 
    app.set('view engine', 'pug') 
 
    app.use(cookieParser(secretConfig)) 
    // parse application/json 
    app.use(bodyParser.json()) 
 
    // parse application/x-www-form-urlencoded 
    app.use(bodyParser.urlencoded({ extended: false })) 
 
 
    app.use(passport.initialize()); 
    app.use(passport.session({ 
      resave: false, 
      saveUninitialized: true, 
      failureFlash: true 
    })); 
 
    //app.use(flash()); 
 
    // Load the REST endpoints 
    app.use('/api', require('./endpoints/whatever/router')) 
    app.use('/api', require('./endpoints/login/router')) 
 
    // app.use('/api', require('./users/router')) 
    // Repeat the above line for additional model areas ("deals", "vehicles",         etc) 
 
 
    app.use('/graphql', graphqlHTTP({ 
        schema: schema, 
        rootValue: root, 
        graphiql: true 
    }));         

请您参考如下方法:

这对我来说不合适:

app.use(passport.session({ 
    resave: false, 
    saveUninitialized: true, 
    failureFlash: true 
})); 

我相信你需要这样的东西:

var session = require('express-session'); 
 
app.use(session({ 
    resave: false, 
    saveUninitialized: true, 
    secret: 'secret here' 
}); 
 
app.use(passport.initialize()); 
app.use(passport.session()); 

即使您在标题中提到“Express-Session”,您发布的代码示例实际上并未使用它。它不是同一个 passport.session

除非您将其用于其他用途,否则您还可以删除 cookie-parser,因为最新版本的 express-session 不需要它。