node.js - NodeJS Expres + RedisStore ,请求 session 始终未定义

标签 node.js express redis

我确实看到了一些类似的问题,但是九个可以解决我的问题!

req.session 在 nodeJS Express 应用中总是未定义的。 在 express/connect-redis/和 express-session 包上使用最新版本。

var express = require('express') ;
var app = express() ;
var port = process.env.PORT || 8008  ;
var mongoose = require('mongoose') ;
var cookieParser = require('cookie-parser') ;
var bodyParser   = require('body-parser');
var session      = require('express-session') ;
var RedisStore = require('connect-redis')(session);
var Hash = require('password-hash') ;
var helmet = require('helmet') ;


app.use(express.static(__dirname + "/view" )) ;
app.use(cookieParser() );
app.use(bodyParser()) ;
app.use(session({
        saveUninitialized: true,
        resave: true ,
        store: new RedisStore({
            host: 'localhost',
            port: 7379,
            db: 2,
            pass: 'somePassworD'
        }),
        secret: 'someSecret' ,
        //cookie: { secure: true}
    })
);

app.use(helmet()) ;
app.use(function (req, res, next) {
    res.locals.csrftoken = req.session._csrf; 
    next();
}) ;

错误信息:

TypeError: Cannot read property '_csrf' of undefined

最佳答案

当您使用 https://www.npmjs.org/package/csurf 时,CSRF token 将出现中间件

var express = require('express') ;
var app = express() ;
var port = process.env.PORT || 8008  ;
var csrf    = require('csurf')
var mongoose = require('mongoose') ;
var cookieParser = require('cookie-parser') ;
var bodyParser   = require('body-parser');
var session      = require('express-session') ;
var RedisStore = require('connect-redis')(session);
var Hash = require('password-hash') ;
var helmet = require('helmet') ;


app.use(express.static(__dirname + "/view" )) ;
app.use(cookieParser() );
app.use(bodyParser()) ;
app.use(session({
        saveUninitialized: true,
        resave: true ,
        store: new RedisStore({
            host: 'localhost',
            port: 7379,
            db: 2,
            pass: 'somePassworD'
        }),
        secret: 'someSecret' ,
        //cookie: { secure: true}
    })
);

app.use(csrf()); 

app.use(helmet()) ;
app.use(function (req, res, next) {
    res.locals.csrftoken = req.session._csrf; 
    next();
}) ;

关于node.js - NodeJS Expres + RedisStore ,请求 session 始终未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021012/

相关文章:

javascript - 异步函数返回 Promise 挂起

javascript - 如何保持 Javascript 数组排序,而不对其进行排序

node.js - 快速路由文件中的 Nodejs : access socket. io 实例

python - 使用 current_app.send_task 时 Celery 任务路由不起作用

redis - stackexchange.redis 通配符删除

javascript - 检查数组 JavaScript 中是否存在字符串

node.js - 使用nodejs对非结构化html进行爬虫

javascript - Node js excel 导出 :Download file without creating a file

node.js - Heroku Node 应用程序不断崩溃

r - 如何在 R 中转换 Redis 日期