Ich verwende Passport auf meiner node.js App und ich verwende derzeit einen Benutzernamen zu login.Node.js Passport-Strategie Login mit E-Mail oder Benutzername
Auf meiner Benutzerregisterseite kann der Benutzer seinen eindeutigen Benutzernamen und E-Mail-Adresse registrieren.
Ich möchte eine Login-Seite mit "Melden Sie sich mit Benutzername/E-Mail:" _ __ _ __ _ _
Wo das Skript erkennen kann, wenn es ein "@" ist in Feld und suchen Sie die E-Mail anstelle des Benutzernamens.
Ich habe für ein paar Stunden ohne Erfolg versucht.
hier ist mein passport.js
var mongoose = require('mongoose')
var LocalStrategy = require('passport-local').Strategy
var User = mongoose.model('User');
module.exports = function(passport, config){
passport.serializeUser(function(user, done){
done(null, user.id);
})
passport.deserializeUser(function(id, done) {
User.findOne({ _id: id }, function (err, user) {
done(err, user);
});
});
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
}, function(username, password, done) {
User.isValidUserPassword(username, password, done);
}));
}
EDIT: unten die user.js ist als
angefordertvar mongoose = require('mongoose');
var hash = require('../util/hash.js');
UserSchema = mongoose.Schema({
username: String,
email: String,
salt: String,
hash: String
})
UserSchema.statics.signup = function(username, email, password, done){
var User = this;
hash(password, function(err, salt, hash){
if(err) throw err;
// if (err) return done(err);
User.create({
username : username,
email: email,
salt : salt,
hash : hash
}, function(err, user){
if(err) throw err;
// if (err) return done(err);
done(null, user);
});
});
}
UserSchema.statics.isValidUserPassword = function(username, password, done) {
this.findOne({username : username}, function(err, user){
// if(err) throw err;
if(err) return done(err);
if(!user) return done(null, false, { message : 'Incorrect username.' });
hash(password, user.salt, function(err, hash){
if(err) return done(err);
if(hash == user.hash) return done(null, user);
done(null, false, {
message : 'Incorrect password'
});
});
});
};
var User = mongoose.model("User", UserSchema);
module.exports = User;
Wo ist der E-Mail/Benutzername-Erkennungsteil? Wahrscheinlich im Mungo-Modell? Es wäre hilfreich, einen Blick darauf werfen zu können. – bredikhin
Vielen Dank für Ihre Antwort. Ich habe den Beitrag bearbeitet, um user.js zu enthalten – user3081516