6
我想要做什麼:
- 用戶
- 創建一個會話創建套接字會話(
socket.io
) - 使用
passport.js
來驗證登錄和socket
會話。
注意
我已經安裝了MongoStore
和passport.socket.io npm's
。我可以登錄並設置用戶的登錄(connect.sid
)
的cookie
問題
如何設置系統存儲socket
會議,他們夫婦與用戶的session
?
代碼
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(護照部分)
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部分)
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);
});
非常感謝。還有一件事,當服務器重新啓動時,用戶會話被刪除,頁面返回到登錄屏幕。 – ashley 2013-02-28 10:46:13
當你說你還有一件事你需要我回答爲什麼你的會話被刪除並返回登錄? – 2013-02-28 11:28:05
我認爲這是正確的行爲。一旦你重新啓動服務器,它應該開始所有新的會話。這是因爲必須在重新啓動後重新進行身份驗證,並在身份驗證後生成新的會話ID。你是否想要在服務器重新啓動後還想繼續進行會話? – 2013-02-28 11:31:47