Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用passport对套接字进行身份验证_Node.js_Mongodb_Sockets_Express_Passport.js - Fatal编程技术网

Node.js 如何使用passport对套接字进行身份验证

Node.js 如何使用passport对套接字进行身份验证,node.js,mongodb,sockets,express,passport.js,Node.js,Mongodb,Sockets,Express,Passport.js,我正在使用passport来验证socket,但我就是做不到 var passport = require('passport'), LocalStrategy = require('passport-local').Strategy; var mongoose = require ('mongoose'); var passportSocketIo = require("passport.socketio"); var sessionStore = require('connect-m

我正在使用
passport
验证socket
,但我就是做不到

var passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy;
var mongoose = require ('mongoose');
var passportSocketIo = require("passport.socketio");
var sessionStore = require('connect-mongo')(express);

mongoose.connect('mongodb://localhost/User');
var db = mongoose.connection;

var Schema = new mongoose.Schema({

    username:String,
    password:String,

});

//Creating model and instance of it
var user=mongoose.model('user', Schema);

app.configure(function() {
  app.use(express.static('public'));
  app.use(express.cookieParser());
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.session({ secret: 'Rchat',
  store: new sessionStore({db: 'user'} ),
  auto_reconnect:   true,
  key:'mykey'
}));

app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);

});



// calling passports local strategy 
passport.use(new LocalStrategy( function(username, password, done) {
    user.findOne({ username: username }, function (err, user) {

  if (err) { return done(err); }

 // check for incorrect username
  if (!user) {
    return done(null, false, { message: 'Incorrect username.' });
  }

  // incorrect password for the selected username
   if (user.password != password) {
      return done(null, false, { message: 'Invalid password' });
    }
  return done(null, user);

});
}
));

// requesting for login page
app.get('/login', function(req, res){
    console.log('requesting for page');
    res.sendfile(__dirname + '/Test.html');
});

// saving the value for session use
passport.serializeUser(function(user, done) {
    done(null, user);
});

//take the information stored in the session
passport.deserializeUser(function(login, done) {
    user.findById(login._id, function(err, user) {
    done(err, user);
    });
});
我知道握手完成后会调用下面的函数,但如何将用户名和密码传递给passport

// When it does handshake
io.set('authorization', passportSocketIo.authorize({
    cookieParser: express.cookieParser,
    key:         'mykey',          
    secret:      'Rchat',  
     store:       sessionStore,        
    success:     onAuthorizeSuccess,  
    fail:        onAuthorizeFail,     
}));

//data contains all the user information from the passport
function onAuthorizeSuccess(data, accept){
    console.log('successful connection to socket.io');

// The accept-callback still allows us to decide whether to
// accept the connection or not.
    accept(null, true);
}

function onAuthorizeFail(data, message, error, accept){
    if(error)
        throw new Error(message);
        console.log('failed connection to socket.io:', message);

    // We use this callback to log all of our failed connections.
        accept(null, false);
}

// socket connection
    io.sockets.on('connection',function(socket){
            socket.on('new user',function(data, callback){
我得到一个错误:

错误:在集合:会话上设置TTL索引时出错

有人能帮我吗?代码正确吗?谢谢