gpt4 book ai didi

javascript - 无法访问 Express/NodeJS 中的 req.session 变量

转载 作者:数据小太阳 更新时间:2023-10-29 04:14:52 24 4
gpt4 key购买 nike

我见过这个问题的许多变体,但似乎没有一个能解决我的问题。我正在尝试使用 Express 设置一个 Node.js 服务器。这是我的服务器配置:

var express = require('express'),
RedisStore = require('connect-redis')(express);

var app = express();

app.use(express.urlencoded());
app.use(express.json());
app.use(express.cookieParser());
app.use(express.session({
store: new RedisStore(),
secret: APP_SECRET
}));

// Initialize redis connection
var client = redis.createClient();
client.on('connect', function() {
console.log('Connected to Redis server')
})
client.on('error', function (err) {
console.log('Error ' + err);
});

// Enable cross-origin resource sharing
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
next();
});

var api = require('./controllers/api.js');

app.post('/login', api.login);
app.get('/auth', api.auth);

app.listen(3000);

这里有一些简单的路线:

exports.login = function(req, res) {
var user = new User(req.username, req.password);
req.session.user = user;
console.log(req.session.user); //works
res.json({user:user});
}

exports.auth = function(req, res) {
console.log(req.session.user); //doesn't work
res.json(req.session.user);
}

所以在我的 login 路由中,我可以按预期打印 session 变量。但是,如果我在访问 login 路由后访问 auth 路由,则 session 变量是未定义的。我怎样才能使 Express session 正常工作?

最佳答案

在典型的 Web 应用程序中,用于验证用户身份的凭据只会在登录请求期间传输。如果身份验证成功,将通过在用户浏览器中设置的 cookie 建立和维护 session 。

每个后续请求将不包含凭据或所有用户数据,而是包含标识 session 的唯一 cookie。为了支持登录 session ,您必须在每个请求中对 session 中的用户实例进行序列化和反序列化。

在您的情况下,您仅在 /login 请求中分配了 req.session.user = user;。它将无法用于进一步的请求(/auth)。

您也必须通过 session ID 在 /auth 请求中获取用户信息。 (或者)更好的是你可以使用 passport用于身份验证。

关于javascript - 无法访问 Express/NodeJS 中的 req.session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21212828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com