connect.utils.parseSignedCookies 已弃用,使用 Express 和 Redis 存储 cookie
connect.utils.parseSignedCookies deprecated, cookie storage with Express and Redis
我正在阅读 Building Scalable Apps with Redis 和 Node.js,其中有一些代码不起作用或已弃用。我正在尝试将 cookie 存储与提供给我的代码一起使用:
var io = require('socket.io'),
connect = require('connect'),
cookie = require('cookie'),
expressSession = require('express-session'),
ConnectRedis = require('connect-redis')(expressSession),
redis = require('redis'),
config = require('../config'),
redisAdapter = require('socket.io-redis'),
redisSession = new ConnectRedis({host: config.redisHost, port: config.redisPort});
var socketAuth = function socketAuth(socket, next){
var handshakeData = socket.request;
var parsedCookie = cookie.parse(handshakeData.headers.cookie);
console.log(parsedCookie);
var sid = connect.utils.parseSignedCookies(parsedCookie['connect.sid'], config.secret);
if (parsedCookie['connect.sid'] === sid)
return next(new Error('Not Authenticated'));
redisSession.get(sid, function(err, session){
if (session.isAuthenticated)
{
socket.user = session.user;
socket.sid = sid;
return next();
}
else
return next(new Error('Not Authenticated'));
});
};
当我 运行 应用程序时,我收到一条错误消息:
Cannot call method 'parseSignedCookies' of undefined
我 95% 确定问题从这里开始:
var sid = connect.utils.parseSignedCookies(parsedCookie['connect.sid'], config.secret);
我确定问题出在 Express 不再使用 Connect 的事实,但是我有什么替代方法来解析 cookie?我可能不得不完全重写代码并解决问题,但如果有人有任何聪明的想法,请告诉我。
似乎模块 cookie-parser 成功了。这是我添加的代码:
var cookieParser = require('cookie-parser');
var sid = cookieParser.signedCookie(parsedCookie['connect.sid'], config.secret);
我正在阅读 Building Scalable Apps with Redis 和 Node.js,其中有一些代码不起作用或已弃用。我正在尝试将 cookie 存储与提供给我的代码一起使用:
var io = require('socket.io'),
connect = require('connect'),
cookie = require('cookie'),
expressSession = require('express-session'),
ConnectRedis = require('connect-redis')(expressSession),
redis = require('redis'),
config = require('../config'),
redisAdapter = require('socket.io-redis'),
redisSession = new ConnectRedis({host: config.redisHost, port: config.redisPort});
var socketAuth = function socketAuth(socket, next){
var handshakeData = socket.request;
var parsedCookie = cookie.parse(handshakeData.headers.cookie);
console.log(parsedCookie);
var sid = connect.utils.parseSignedCookies(parsedCookie['connect.sid'], config.secret);
if (parsedCookie['connect.sid'] === sid)
return next(new Error('Not Authenticated'));
redisSession.get(sid, function(err, session){
if (session.isAuthenticated)
{
socket.user = session.user;
socket.sid = sid;
return next();
}
else
return next(new Error('Not Authenticated'));
});
};
当我 运行 应用程序时,我收到一条错误消息:
Cannot call method 'parseSignedCookies' of undefined
我 95% 确定问题从这里开始:
var sid = connect.utils.parseSignedCookies(parsedCookie['connect.sid'], config.secret);
我确定问题出在 Express 不再使用 Connect 的事实,但是我有什么替代方法来解析 cookie?我可能不得不完全重写代码并解决问题,但如果有人有任何聪明的想法,请告诉我。
似乎模块 cookie-parser 成功了。这是我添加的代码:
var cookieParser = require('cookie-parser');
var sid = cookieParser.signedCookie(parsedCookie['connect.sid'], config.secret);