Implement authenticated WebSocket connections
mainNuxt Auth Utils is compatible with Nitro WebSockets. To protect WebSocket connections, use requireUserSession(request) within the upgrade handler to verify authentication before allowing the connection to upgrade. You can then use requireUserSession(peer) within the open handler to access the user session.
// server/routes/ws.ts
export default defineWebSocketHandler({
async upgrade(request) {
// Make sure the user is authenticated before upgrading the WebSocket connection
await requireUserSession(request)
},
async open(peer) {
const { user } = await requireUserSession(peer)
peer.send(`Hello, ${user.name}!`)
},
message(peer, message) {
peer.send(`Echo: ${message}`)
},
})