【发布时间】:2013-10-09 12:43:04
【问题描述】:
我一直在“玩”使用 node.js、express 和 socket.io 进行身份验证
我已经试过这里的例子http://howtonode.org/socket-io-auth
app.use(express.cookieParser("rocks"));
app.use(express.session());
io.set('authorization', function(handshakeData, accept) {
console.log('in authorization');
if(handshakeData.headers.cookie) {
handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
handshakeData.sessionID = connect.utils.parseSignedCookie(handshakeData.cookie['express.sid']);
if (handshakeData.cookie['express.sid'] == handshakeData.sessionID) {
return accept('Cookie is invalid.', false);
}
} else {
return accept('No cookie transmitted.', false);
}
accept(null, true);
});
我不断收到由连接产生的错误,更具体地说是这个调用行
connect.utils.parseSignedCookie(handshakeData.cookie['express.sid']);
/workspace/node_modules/connect/node_modules/cookie-signature/index.js:39
if ('string' != typeof secret) throw new TypeError('secret required');
^
TypeError: secret required
我试图找到 express.cookieParser(我有)和 express.session(我没有)的 api 文档,并查看了有问题的源代码。我想我设置项目的方式有问题,因为 connect 似乎有一个 cookieParser 和 express,或者 express 正在使用 connect 中的 cookieParser。
我的 package.json 看起来像
{
"name": "mplayer",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"socket.io":"0.9.16",
"express": "3.4.0",
"jade": "*",
"stylus": "*",
"cookie": "*"
}
}
有人能解释一下我为什么会收到这个错误吗?其次,有人可以分享使用 Node.js、socket.io 和 express 验证用户身份的最有效方法(我知道有各种各样的文章,但事情似乎已经发生了变化。很难跟踪最新的内容)。
【问题讨论】:
标签: node.js authentication express socket.io