护照loginauthentication没有密码字段

我正在build立用户注册使用nodejs和expression。 我正在创build一个没有任何护照或任何身份validation策略的新用户。 我想要的是用户应该被视为login成功后login。 所以我正在为用户构buildloginAPI。 用户只能使用电子邮件字段进行身份validation(因为我没有与用户存储任何密码)。 但我无法validation用户,因为我在护照authentication中“缺less凭证”。

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); }); }; 

任何人都可以帮助我弄清楚我在这里做错了什么。

你在一半。 你可以使用护照本地,只需要一个用户名字段。

您可以覆盖用户名和密码字段以使用相同的密钥。

 passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'email', passReqToCallback : true }, 

然后它只需要在login请求中包含一个字段。

在你的情况下,你不能使用LocalStrategy 。 但是,您可以通过使用节点模块passport-strategy来实现自己的策略: https ://www.npmjs.com/package/passport-strategy