Ja, ich sehe, dass diese Frage here und here gefragt wurde, aber die Antworten verweisen auf entweder Änderungen an Ihren deserializeUser
Rückruf machen, oder etwas in Ihrem Mongoose Modell zu ändern.PassportJS: Benutzer ist nicht
Ich habe die erste ohne Erfolg versucht und verwende den normalen alten NodeJS-Treiber, also bin ich mir nicht ganz sicher, wo ich die Ursache meines Problems lokalisieren soll.
Hier ist mein Skript:
AUTHENTICATE.JS:
var app = require('express');
var router = app.Router();
var assert = require('assert');
var bcrypt = require('bcrypt');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(username, password, done) {
User.findOne({ username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
router.post('/login',
passport.authenticate('local', {successRedirect:'/',
failureRedirect:'/login',failureFlash: false}),
function(req, res) {
res.redirect('/');
});
Für meine app.js
Datei ich eine Reihe der vorgeschlagenen Korrekturen in ähnliche Fragen versucht haben, aber nichts einen Unterschied gemacht hat. Dies ist, wie es aussieht:
APP.JS:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var expressValidator = require('express-validator');
var passport = require('passport');
var localStrategy = require('passport-local').Strategy;
var mongo = require('mongodb').MongoClient;
var session = require('express-session');
var bcrypt = require('bcrypt');
// Express Session
app.use(session({
secret: 'keyboard cat',
saveUninitialized: true,
resave: true,
cookie: {secure: true}
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
//initialize passport for app
app.use(passport.initialize());
app.use(passport.session());
// make mongodb available to the application
app.use((req, res, next) => {
mongo.connect('mongodb://localhost:27017/formulas', (e, db) => {
if (e) return next(e);
req.db = db;
next();
});
});
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/public'));
// Express Validator
app.use(expressValidator({
errorFormatter: function(param, msg, value) {
var namespace = param.split('.')
, root = namespace.shift()
, formParam = root;
while(namespace.length) {
formParam += '[' + namespace.shift() + ']';
}
return {
param : formParam,
msg : msg,
value : value
};
}
}));
//define routes here
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function(){
console.log("The server is now listening on port "+app.get('port'));
});
module.exports = app;
Jede Hilfe wäre sehr dankbar, danke.
Hat das für Sie funktioniert? Brauchst du noch Hilfe? – Josh
Vielen Dank für Ihre Antwort, und ich entschuldige mich für die verspätete Antwort, aber im Moment bin ich immer noch dabei. Ich verstehe, wie Mongoose Ihnen erlaubt, Schemas zu erstellen, und Sie können eins für einen Benutzer verwenden und dann das in 'deserializeUser' verwenden, aber ich bin nicht sicher, wie das andere Beispiel dazu in Beziehung steht, weil die' User' Klasse nie definiert ist. Im Moment werde ich wahrscheinlich einfach mein eigenes 'User'-Objekt erstellen und sehen, wie das geht. –