मैं नोडजेज पर पासपोर्ट सेट करता हूं और उपयोगकर्ताओं को लॉगिन करने और नए खाते बनाने की अनुमति देने के लिए यह मोंगोस के साथ काम कर रहा हूं।नोडजेएस पासपोर्ट
app.js:
var express = require('express')
, app = module.exports = express.createServer()
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy
, routes = require('./routes/index')(app) //index loads in multiple routes
, MongoDBConnection = require('./database/DatabaseConnector').MongoDBConnection;
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({ secret: 'justdoit' }));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
var mongoDbConnection = new MongoDBConnection();
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
mongoDbConnection.findUserById(id, function(err, user){
done(err, user);
});
});
passport.use(new LocalStrategy(
function(username, password, done) {
process.nextTick(function() {
mongoDbConnection.findUser(username, function(err, user) {
//conditions....
});
});
}
));
app.get('/', function(req, res){
res.render('index', { title: "Index", user: req.user });
});
app.get('/account', ensureAuthenticated, function(req, res){
res.render('account', { title: "Account", user: req.user });
});
app.get('/login', function(req, res){
res.render('login', { title: "Login", user: req.user, message: req.flash('error') });
});
app.post('/login',
passport.authenticate('local', {
successRedirect: '/account',
failureRedirect: '/login',
failureFlash: true })
);
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
मेरे समस्या app.js है (जो है, जहां पासपोर्ट कोड है) फ़ाइल थोड़ा बड़ा हो रहा है और मैं अपनी ही लिपि में पासपोर्ट वर्गों को स्थानांतरित करने की कोशिश की और app.js के बाहर के मार्ग हैं और अपने स्वयं के auth.js रूट फ़ाइल में और फिर app.js. के माध्यम से मार्गों का संदर्भ लें। यह अन्य मार्गों के लिए काम करता है लेकिन पासपोर्ट से संबंधित लोगों जैसे कि लॉगिन के रूप में यह passport.authenicate() फ़ंक्शन को आग लगाना प्रतीत नहीं होता है।
क्या वैसे भी मैं पासपोर्ट मार्ग और कार्यों को अपनी फ़ाइल में डाल सकता हूं और इसे app.js से लोड/लोड कर सकता हूं?
auth.js:
module.exports = function(app){
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
mongoDbConnection.findUserById(id, function(err, user){
done(err, user);
});
});
passport.use(new LocalStrategy(
function(username, password, done) {
process.nextTick(function() {
mongoDbConnection.findUser(username, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { message: 'Unknown user ' + username });
}
if (user.password != password) {
return done(null, false, { message: 'Invalid password' });
}
return done(null, user);
});
});
}
));
app.get('/', function(req, res){
res.render('index', { title: "Index", user: req.user });
});
app.get('/account', ensureAuthenticated, function(req, res){
console.log("directing to the account page....");
res.render('account', { title: "Account", user: req.user });
});
app.get('/login', function(req, res){
res.render('login', { title: "Login", user: req.user, message: req.flash('error') });
});
app.post('/login',
passport.authenticate('local', {
successRedirect: '/account',
failureRedirect: '/login',
failureFlash: true })
);
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
}
क्या आप कुछ कोड पोस्ट कर सकते हैं? – UpTheCreek
वहां कुछ कोड जोड़ा गया। असल में मैं इसे बाहरी रूट फ़ाइल में स्थानांतरित करने और app.js. से अव्यवस्था को हटाने के लिए देख रहा हूं। – DanyZift
क्या आप app.js v2 भी पोस्ट कर सकते हैं? शायद समस्या यह है कि मॉड्यूल app.js. में आपके द्वारा बनाए गए पासपोर्ट ऑब्जेक्ट को नहीं देख सकता है। आप ऐप पास कर रहे हैं, लेकिन पासपोर्ट नहीं। आज़माएं: 'module.exports = function (ऐप, पासपोर्ट) {...' – UpTheCreek