Skip to content

Instantly share code, notes, and snippets.

@geta6
Last active December 23, 2015 18:59
Show Gist options
  • Save geta6/6678999 to your computer and use it in GitHub Desktop.
Save geta6/6678999 to your computer and use it in GitHub Desktop.
socket.io authorization example.
# ...
sessionStore = new ((require 'connect-mongo') express)
mongoose_connection: mongoose.connections[0]
# ...
app.set 'session', sessionStore
# ...
app.use express.session
secret: process.env.SESSION_SECRET
store: app.get 'session'
app.use passport.initialize()
app.use passport.session()
# ...
http = (require 'http').createServer app
http.listen process.env.PORT, ->
console.log "express now listening on PORT #{process.env.PORT}"
# Setup
redis = require 'socket.io/node_modules/redis'
io = (require 'socket.io').listen http, log: no
# clusteringしている場合は必須、それ以外では不要
io.set 'store', new (require 'socket.io/lib/stores/redis')
redisPub: redis.createClient()
residSub: redis.createClient()
redisClient: redis.createClient()
io.set 'browser client minification', yes
io.set 'browser client etag', yes
io.set 'authorization', (data, accept) ->
# 最初のコネクション時に呼ばれる
# ここでdataにいろいろ書き込むと、socketのhandshakeから引っ張れる
data.user = {}
data.auth = no
return accept null, yes unless data.headers?.cookie?
(express.cookieParser process.env.SESSION_SECRET) data, {}, (err) ->
return accept err, no if err
return app.get('session').load data.signedCookies['connect.sid'], (err, session) ->
console.error err if err
return accept err, no if err
if session
data.auth = yes
data.user = session.passport.user
return accept null, yes
# Connection
io.sockets.on 'connection', (socket) ->
user = socket.handshake.user
auth = socket.handshake.auth
socket.on 'user', ->
if auth
socket.emit 'userinfo', user
else
socket.emit 'userinfo', {message: 'require to login'}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment