Socket.IO でユーザー認証

公開日:2018-11-30
最終更新:2018-11-30
※この記事は外部サイト(https://qiita.com/tapioca24/items/36608a35...)からのクロス投稿です

Socket.IO で接続してきたクライアントが正規ユーザーかどうかの認証を行う。

環境

  • Node.js: 10.10.0
  • Socket.IO: 2.1.1

middleware について

Socket.IO の namespace.use(fn) を使用して、接続してきたソケットをハンドリングするミドルウェアを登録することができる。

io.use((socket, next) => {
  if (socket.request.headers.cookie) return next()
  next(new Error('Authentication error'))
})

サーバー側

Socket.IO Client API | Socket.IO

// server-side
const io = require('socket.io')();

// middleware
io.use((socket, next) => {
  let token = socket.handshake.query.token;
  if (isValid(token)) {
    return next();
  }
  return next(new Error('authentication error'));
});

// then
io.on('connection', (socket) => {
  // 認証に失敗した場合 connection イベントは発火しない
  // do something...
});

クライアント側

接続

// クライアント
const socket = io('http://localhost', {
  query: {
    token: 'abc'
  }
})
socket.on('connect', () => {
  // 認証に失敗した場合 connect イベントは発火しない
  // do something...
})

トークンの更新

再接続のときにクエリの内容を更新することができる。

socket.on('reconnect_attempt', () => {
  socket.io.opts.query = {
    token: 'def'
  }
})
記事が少しでもいいなと思ったらクラップを送ってみよう!
36
+1
@tapiocaの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする