javascript - Using passport.socketio with express and passport-local-mongoose -
i'm trying make easy chat room using passport
, socket.io
, need know has emit message using socket.io
, use passport.socketio
this, , use module passport-local-mongoose
simplify using passport
.
however, when add
io.use(passportsocketio.authorize({ cookieparser: cookieparser, secret: 'lqcbfu1wfjagklfzng4x', store: sessionstore }));
in app.js
caused client-side socket not connected server (if commented block, message server's console )
i thought may due misusing of passport.socketio
or module passport-local-mongoose
, don't know what's wrong qaq.
app.js:
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieparser = require('cookie-parser'); var bodyparser = require('body-parser'); var session = require('express-session'); var flash = require('req-flash'); var helmet = require('helmet'); var passport = require('passport'); var mongoose = require('mongoose'); var localstrategy = require('passport-local').strategy; var socketio = require('socket.io'); var passportsocketio = require('passport.socketio'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); // midllewares preprocess things app.use(favicon(path.join(__dirname, 'assets', 'favicon.ico'))); app.use(helmet()); app.use(logger('dev')); app.use(bodyparser.json()); app.use(bodyparser.urlencoded({ extended: false })); app.use(cookieparser()); var sessionstore = new session.memorystore(); app.use(session({ secret: 'lqcbfu1wfjagklfzng4x', store: sessionstore, resave: false, saveuninitialized: false, })); app.use(passport.initialize()); app.use(passport.session()); app.use(flash()); app.use(express.static(path.join(__dirname, 'assets'))); app.use('/', require('./routes/index')); app.use('/users', require('./routes/users')); // passport config var account = require('./models/account'); passport.use(new localstrategy(account.authenticate())); passport.serializeuser(account.serializeuser()); passport.deserializeuser(account.deserializeuser()); // make socket.io able use passport var io = socketio(); io.use(passportsocketio.authorize({ cookieparser: cookieparser, secret: 'lqcbfu1wfjagklfzng4x', store: sessionstore })); app.io = io; (...)
bin/www:
(...) /** * create http server. */ var server = http.createserver(app); /** * handle socket.io event */ var io = app.io; io.attach(server); require('../models/socketio')(io); /** * listen on provided port, on network interfaces. */ server.listen(port); server.on('error', onerror); server.on('listening', onlistening); (...)
models/account.js:
var mongoose = require('mongoose'); var passportlocalmongoose = require('passport-local-mongoose'); mongoose.promise = require('bluebird'); var monconn = mongoose.createconnection('mongodb://127.0.0.1:27017/account'); var schema = mongoose.schema; var accountschema = new schema({ username: string, password: string }); // more setting, visit https://github.com/saintedlama/passport-local-mongoose#options accountschema.plugin(passportlocalmongoose, { errormessages: { (...) } }); var user = monconn.model('account', accountschema); module.exports = user;
models/socketio.js:
function iohandler(io){ io.on('connection', function(socket) { console.log("> connected socketio"); //console.log(string(socket.request.user)+"has logined socket"); socket.emit('hi', {message: "hi"}); }); } module.exports = iohandler;
Comments
Post a Comment