Я строю регистрацию пользователя с помощью nodejs и express. Я создаю нового пользователя без паспорта или любой стратегии аутентификации. я хочу, чтобы пользователь был обработан как зарегистрированный, как только он зарегистрировался успешно. Так что я создаю login api для пользователя. Если пользователь может аутентифицироваться, используя только поле электронной почты (поскольку я не сохраняю пароль с пользователем). Но я не могу проверять пользователя, поскольку получаю «отсутствующие учетные данные» в удостоверении подлинности паспорта.аутентификация в паспорте без пароля.
app.js
var config = require('./config/development');
var passport = require('passport');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var app = express();
//connect db
mongoose.connect(config.db);
mongoose.set('debug', config.mongoose.debug);
require('./config/passport')(passport); // pass passport for configuration
//initialize all models
var modelsPath = require('path').join(__dirname, 'models');
require('fs').readdirSync(modelsPath).forEach(function(file) {
require('./models/' + file);
});
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(expressValidator());
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(cookieParser());
/// required for passport
app.use(session({
secret: 'anystringoftext',
saveUninitialized: true,
resave: true
})); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(express.static(path.join(__dirname, 'public')));
require('./routes')(app, passport);
passport.js
var mongoose = require('mongoose'),
LocalStrategy = require('passport-local').Strategy,
User = require('../models/users');
module.exports = function(passport) {
// Serialize the user id to push into the session
passport.serializeUser(function(user, done) {
done(null, user.id);
});
// Deserialize the user object based on a pre-serialized token
// which is the user id
passport.deserializeUser(function(id, done) {
User.findOne({
_id: id
}, function(err, user) {
done(err, user);
});
});
// Use local strategy
passport.use(new LocalStrategy({
usernameField: 'email',
passReqToCallback : true
},
function(email, password, done) {
User.findOne({
email: email
}, function(err, user) {
if (err) {
return done(err);
} else {
return done(null, user);
}
});
}
));
return passport;
};
маршруты/user.js
module.exports = function(app, passport) {
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (user === false) {
res.json('no user found');
} else {
res.json('login successful');
}
})(req, res, next);
});
};
ли кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно здесь ,
Благодарим вас за ответ. Я попробую. – zulekha