|
# ... |
|
|
|
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'} |