gpt4 book ai didi

node.js - 如何使用 node 和 express-ws 在 websockets 中进行身份验证

转载 作者:行者123 更新时间:2023-12-03 12:18:45 24 4
gpt4 key购买 nike

我正在使用 Node 10.16.0,表示 4.0.0 和 express-ws模块 。在我使用 REST 的常规路由中,我使用中间件来检查是否有带有 token 的 header 并验证该 token 。

我如何为 websockets 做同样的事情?

我不能只向 ws 添加 header 并将其传递给 Node 路由,即使 express-ws 允许轻松创建 express-style 路由。

目前,我正在使用一个http服务器创建一个ws服务器,然后分离不同的快速路由

//app.js
const app = express();

const wsHttpServer = http.createServer();
wsHttpServer.listen(5001);
const expressWs = require('express-ws')(app , wsHttpServer);

app.use(cors());

app.use(express.static(path.join(__dirname,'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(express.json());
app.use(express.urlencoded({extended:false}));

app.use('/ws', require('./routes/wsroute'));
app.use('/login', require('./routes/login'));


const port = process.env.PORT || 4000;
app.listen(port, ()=>{
console.log('server runs on port ', port);
});

exports.expressWs = expressWs;

然后是 ws 路由,根据 express-ws 的例子

//wsroute.js
router.ws('/users/:name/:date/:time', /*token.validate(),*/ (ws, req) => {
const name = req.params.name;
const date = req.params.date;
const time = req.params.time;
console.log('ws route');
console.log('ws route',name, date, time);
});

如果我取消注释 token.validate() 部分,这将永远不会控制日志,因为没有带有 token 的 header 。

如何向 ws 添加 header ,就像我在 REST 中所做的那样,以便自动检查它?我想如果 ws 服务器是使用 http 服务器初始化的,并且 ws 路由还包含一个 req,我能以某种方式做到这一点吗?

或者有其他方法吗?

谢谢

最佳答案

重复 Websockets token authentication using middleware and express in node.js .按照那里的例子。

监听 wsHttpServer.on('upgrade') 事件并在那里执行您选择的身份验证。如果您愿意,还可以在升级事件到达您的路线之前附加一个标题。

关于node.js - 如何使用 node 和 express-ws 在 websockets 中进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59050885/

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