Я пытаюсь использовать электронную почту и пароль для аутентификации с использованием локального паспорта. У меня был аналогичный код, когда я использовал имя пользователя, и он работал нормально. В электронной почте я внес некоторые изменения, но ничего не работает. Прямо в конечной точке '/ login' типа 'post' условие пользователя condition! В файле users.js (показано ниже как 2-й фрагмент кода) каким-то образом выполняется. Это даже не вход в паспорт. Использование. Ниже приведен код: - В user.js (файл модели),
var mongoose=require('mongoose');
var bcrypt=require('bcryptjs');
//user schema
var UserSchema=mongoose.Schema({
phone: {
type:String,
},
email:{
type: String,
index:{unique:true}
},
password:{
type: String
},
firstname:{
type: String
},
lastname:{
type: String
}
});
var User=module.exports = mongoose.model('User',UserSchema);
module.exports.getUserByUsername=function(email,callback){
var query={email:email};
User.findOne(query, callback);
}
module.exports.comparePassword=function(candidatePassword, hash, callback){
bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
callback(null,isMatch);
});
}
}
В users.js (где я указываю маршруты):
var express = require('express');
var router = express.Router();
var bodyParser=require('body-parser');
var User=require('../models/user');
var passport=require('passport');
var localStrategy=require('passport-local').Strategy;
router.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) { /*this is where the problem is this code executes everytime*/
return res.send('User not found');
}
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.json(user);
});
})(req, res, next);
});
passport.serializeUser(function(user, done) {
done(null, user.id);
});
//for sessions
passport.deserializeUser(function(id, done) {
User.getUserById(id, function(err, user) {
done(err, user);
});
});
//this doesnt seem to work
passport.use(new localStrategy({usernameField:'email', passwordField:'password'},function(email,password,done){
User.getUserByUsername(email, function(err,user){
if(err) throw err;
if(!user){
return done(null,false,{message: 'User not found'});
}
User.comparePassword(password, user.password, function(err, isMatch){
if(err) return done(err);
if(isMatch){
return done(null, user);
}
else{
return done(null,false,{message: 'Password doesnt match our records'});
}
});
});
}));
Обратите внимание, что на этом нет внешнего интерфейса. Я просто использую почтальона, чтобы проверить свои API.
null
. Вы проверяли ценность электронной почты и пользователя? Попробуйте переименовать поле электронной почты в вашей модели (и все ссылки на него). Это помогло мне с аналогичной проблемой - person kranthi117   schedule 28.09.2016