लक्ष्यसत्र passport.js
मैं आपकी क्या अपेक्षाएं हैं:
- उपयोगकर्ता के सत्र बनाएं सॉकेट के लिए एक सत्र बनाएँ (
socket.io
) - लॉगिन और
socket
सत्रों को प्रमाणीकृत करने के लिएpassport.js
का उपयोग करें।
नोट्स
मैं MongoStore
और passport.socket.io npm's
स्थापित किया है। मैं प्रवेश और उपयोगकर्ता के cookie
में (connect.sid
)
लॉग इन सेट कर सकते हैं प्रश्न
मैं कैसे करूँ सेटअप प्रणाली 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
जब आप एक और बात कहते हैं तो आप कह रहे हैं कि आपको जवाब देने की आवश्यकता है कि आपका सत्र क्यों हटाया जाता है और लॉगिन पर वापस जाता है ??? –
मुझे लगता है कि यह उचित व्यवहार है। एक बार सर्वर को पुनरारंभ करने के बाद इसे सभी नए सत्र शुरू करना चाहिए। ऐसा इसलिए है क्योंकि आपको पुनरारंभ करने के बाद पुन: प्रमाणीकरण करना होगा और प्रमाणीकरण के बाद एक नया सत्र आईडी उत्पन्न होनी चाहिए। क्या आप कह रहे हैं कि सर्वर को पुनरारंभ करने के बाद भी आप सत्रों को जारी रखना चाहते हैं? –