Ada*_*kis 9 javascript websocket node.js passport.js
当有人打开WebSocket连接时,如何访问当前会话的护照登录?
我找到了一个很好的项目express-ws,看起来效果很好
app.ws('/', function(ws, req) {
ws.on('message', function(msg) {
console.log('express-ws --- ', msg);
});
console.log('socket', req.user); //current user == req.user
});
Run Code Online (Sandbox Code Playgroud)
但是,如何通过简单的Websocket连接获取相同的信息呢?
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({ port: 3001 });
wss.on('connection', function(socket){
//Where is the current user????
console.log('connection');
socket.on('message', function(message){
console.log('message received', message);
});
});
Run Code Online (Sandbox Code Playgroud)
(这第二个连接工作得很好 - 但我不能为我的生活找到任何方法从Passport获取登录信息)
Ale*_*ggs 10
在创建WS服务器时,请按如下所示添加"verifyClient"参数以获取会话信息:
const wss = new (require('ws').Server)({
server,
verifyClient: (info, done) => {
sessionParser(info.req, {}, () => {
done(info.req.session)
})
}
})
Run Code Online (Sandbox Code Playgroud)
sessionParser您express-session配置的对象在哪里.然后,这允许您通过websocket访问它req.session.如果您使用护照,您可能需要req.session.passport.user..
可以使用req.session.passport.user来访问经过身份验证的用户 ID,而不是使用ws.upgradeReq.session.passport.user.
app.ws('/', function(ws, req) {
ws.on('message', function(msg) {
console.log('express-ws --- ', msg);
});
console.log(ws.upgradeReq.session.passport.user);
/* keys can be found like
for(var key in ws.upgradeReq.session.passport){
console.log(key);
}
*/
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3488 次 |
| 最近记录: |