express 在 Socket.IO 中 如何使用 token 验证,前端又如何传递过来token
时间: 2024-02-23 09:58:41 浏览: 18
在 Express 中使用 Socket.IO 进行身份验证和授权,一般需要在服务器端进行处理。以下是一个简单的示例:
```javascript
const server = require('http').createServer(app);
const io = require('socket.io')(server);
io.use((socket, next) => {
const token = socket.handshake.query.token;
// 进行 token 验证
if (isValidToken(token)) {
return next();
}
// 验证失败,拒绝连接
return next(new Error('Authentication error'));
});
io.on('connection', (socket) => {
console.log('a user connected');
});
server.listen(3000);
```
在上述示例中,首先使用 `io.use()` 方法对连接进行身份验证,在这个函数中,可以获取到连接握手时客户端传递的 `token`,然后通过自定义的 `isValidToken()` 方法进行验证。如果验证成功,则调用 `next()` 方法,允许连接;否则,调用 `next()` 方法并传递一个错误对象,拒绝连接。
在客户端传递 `token` 时,可以使用 `query` 参数进行传递,例如:
```javascript
const socket = io('http://localhost:3000', {
query: {
token: 'your-token-here'
}
});
```
在上述代码中,连接时通过 `query` 参数传递了 `token` 值。这个值将在服务器端的 `io.use()` 方法中被获取并进行验证。