TorSessions mit Express.js + passport.js
Was ich tun möchte:
- Erstellen Sie eine Sitzung für den Benutzer
- eine Sitzung für den Sockel erstellen (
socket.io
) - Verwenden Sie
passport.js
zum Authentifizieren der Anmeldung undsocket
Sitzungen.
Hinweise
Ich habe MongoStore
und passport.socket.io npm's
installiert. Ich kann die cookie
des Benutzers in (connect.sid
)
FRAGE
Wie richte ich das System sie mit dem session
des Benutzers speichern socket
Sitzungen und Paar angemeldet anmelden und eingestellt?
-Code
app.js
/* The usual express setup */
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
User = require('./models/user.js'),
MongoStore = require('connect-mongo')(express);
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.session({
secret: 'chuck norris',
store: new MongoStore({db: User.name}, // the db's name
function(err) {
console.log(err || 'connect ok!');
})
}));
app.use(express.methodOverride());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.js (der Pass Teil)
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
User.findOne({username: username}, function(err, user) {
if(!user) {
return done(null, false, {message: 'Incorrect Username!'});
}
if(!user.validPassword(password)) {
return done(null, false, {message: 'Incorrect Password!'});
}
return done(null, user);
});
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
app.post('/',
passport.authenticate('local'),
function(req, res) {
res.redirect('/home/'+req.user.username);
});
app.js (socket.io Teil)
io.set('authorization', passportSocket.authorize({
key: 'connect.sid',
secret: 'chuck norris',
store: /* Not entirely sure what goes here */
fail : function(data, accept) { accept(null, false); },
success: function(data, accept) { accept(null, true); }
}));
io.sockets.on('connection', function(socket) {
console.log('User Connected: ' + socket.handshake.user.username);
});
Vielen Dank. Noch eine Sache, wenn der Server neu gestartet wird, wird die Benutzersitzung gelöscht und die Seite kehrt zum Anmeldebildschirm zurück. – ashley
Wenn du noch eine Sache sagst, sagst du, du brauchst mich zu beantworten, warum deine Sitzung gelöscht wird und zurück zum Login geht ??? –
Ich denke, das ist das richtige Verhalten. Sobald Sie den Server neu gestartet haben, sollte er alle neuen Sitzungen starten. Dies liegt daran, dass Sie sich nach dem Neustart erneut authentifizieren müssen und nach der Authentifizierung eine neue Sitzungs-ID generiert wird. Wollen Sie sagen, dass Sie Sitzungen auch nach dem Serverneustart beibehalten möchten? –