से पूछताछ नहीं करता है मैं अपने node.js ऐप में passport.js का उपयोग करने की कोशिश कर रहा हूं ताकि मोंगोडीबी के साथ उपयोगकर्ता को प्रमाणित किया जा सके। मैंने सफलता कभी नहीं मारा। "[email protected]", "password":पासपोर्ट-स्थानीय रिटर्न 400 त्रुटि, कभी भी डेटाबेस
पोस्ट में, मैं "ईमेल" भेजें "परीक्षण"
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/fail' })
);
passport.use(new LocalStrategy({
emailField: 'email',
passwordField: 'passw',
},
function (emailField, passwordField, done) {
process.nextTick(function() {
db.collection(users, function (error, collection) {
if (!error) {
collection.findOne({
'email': emailField,
'password': passwordField
}, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
console.log('this email does not exist');
return done(null, false);
}
return done(null, user);
});
} else {
console.log(5, 'DB error');
}
});
});
}));
MongoDB 'उन' संग्रह में:
{
"_id": {
"$oid": "533b5283e4b09d8a1148b4c4"
},
"email": "[email protected]",
"password": "test"
}
शायद मैं डेटाबेस से कनेक्ट नहीं कर रहा हूं, मुझे यकीन नहीं है।
इसके अलावा, जब मैं पूरे समारोह में लॉग इन करता हूं, तो मुझे कोई लॉग नहीं मिलता है। मुझे बस
POST /login 302 7ms - 39b
GET /fail 404 3ms
किसी भी सुझाव की सराहना की जाएगी। मुझे लगता है कि मुझे कुछ याद आ रहा है लेकिन मुझे यकीन नहीं है कि इसे कैसे व्यवस्थित किया जाए। इन का उपयोग कर
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
:
var uristring =
process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
'mongodb://<myurlhere>';
mongo.connect(uristring, function (err, db) {
यहाँ अद्यतन कोड
इन की आवश्यकता होती है: अन्य समारोह, जहां मैं डेटाबेस के लिए लिख रहा हूँ में मैं का उपयोग करना :
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat'}));
app.use(logfmt.requestLogger());
app.use(express.static(path.join(__dirname, 'public')));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
// User authentication passport
passport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'passw',
},
function (userId, password, done) {
// removed process.nextTick
console.log('Hey! no more 400 error!');
db.collection(users, function (error, collection) {
if (!error) {
collection.findOne({
'email': userId,
'password': password
}, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
console.log('this email does not exist');
return done(null, false);
}
return done(null, user);
});
} else {
console.log(5, 'DB error');
}
});
}
));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
app.post('/login', passport.authenticate('local'), function(req, res) {
console.log('SUCCESS WOOOO');
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
//res.redirect('/users/' + req.user.username);
});
यह कोड हमेशा मुझे लॉग इन करते समय POST /login 400 10ms
देता है। मेरे सभी अन्य मार्ग ठीक काम करते हैं।
क्या आपका कोड एक फ़ाइल में है या मॉड्यूल में तोड़ दिया गया है? मैं पूछता हूं क्योंकि जिस क्रम में आप चीजें कॉल करते हैं, वह मामला हो सकता है। साथ ही, क्या आपने किसी विशेष कारण के लिए अपने कोड में 'process.nextTick' छोड़ा था? मेरा मानना है कि यह एक डीबी कॉल की देरी 'नकली' उदाहरण कोड में है लेकिन वास्तव में इसकी आवश्यकता नहीं है। –
नहीं, मैंने अभी इस ऐप को शुरू किया है और वर्तमान में यह फ़ंक्शन app.js. में है। मैं प्रमाणीकरण काम करने के बाद इस मॉड्यूलर को तोड़ने पर योजना बनाने की योजना बना रहा हूं। – Joel
मैंने इतनी सारी चीजों की कोशिश की है। वर्तमान में मुझे 404 मिल रहा है। 'app.post ('/ login', passport.authenticate ('local'), फ़ंक्शन (req, res) {' 'console.log ('सफलता WOOOO');' '// यदि यह फ़ंक्शन कहलाता है, तो प्रमाणीकरण सफल रहा। ' // req.user में प्रमाणीकृत उपयोगकर्ता शामिल है। '//res.redirect('usus/ '+ req.user.username);' '});' – Joel