节点JS护照 – 400注册不好的请求

我尝试在我的Web应用程序上实现一个注册,使用Node JS和Passport.js进行本地身份validation,但是当我在Insomnia上发布请求时(如Postman),出现此错误:

Bad Request 

我不明白,因为我遵循我在Google上find的教程来执行此操作。 这里是路由(auth.js):

 const passport = require('passport'); const router = require('express').Router(); //const UserController = require('../controller/UserController'); router // login .post("/login", passport.authenticate("local", function(req, res, next) { console.log(req); })) // logout .get('/logout', (req, res, next) => { req.session.destroy((err) => { res.redirect('/login') }) }) // signup .post("/signup", passport.authenticate("local-register"), (req, res) => { var userInfo = req.body; }) module.exports = router; 

这里是Passport.js文件:

 const bcrypt = require('bcrypt-nodejs'); const db = require("./queries"); const passport = require('passport'); const LocalStrategy = require("passport-local").Strategy passport.use(new LocalStrategy(authenticate)) passport.use("local-register", new LocalStrategy({passReqToCallback: false}, register)) function authenticate(email, password, done) { db.one('select * from users where email = $1', email) .then((user) => { if(!user || !bcrypt.compareSync(password, user.password)) { return done(null, false, {message: "invalid user and password combination"}); } done(null, user) }, done); } function register(email, password, done) { db.one('select * from users where email = $1', email) .then((user) => { if(user) { return done(null, false, {message: "An user with this address have already been created."}); } const newUser = { email: email, password: bcrypt.hashSync(password), }; db.none('insert into users(email, password) values($1, $2)', [newUser.email, newUser.password]) .then((ids) => { newUser.id = ids[0] done(null, newUser) }) }) } passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { db.one('select * from users where id = $1', id) .then((user) => { done(null, user) }, done); }); 

我使用Postgresql作为这个项目的数据库,使用pg-promise包。

这是app.js文件:

 var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var session = require('express-session'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var passport = require('passport') require('./passport'); var index = require('./routes/index'); var usersRoutes = require('./routes/users'); var authRoutes = require('./routes/auth'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(passport.initialize()) app.use(passport.session()) app.use('/', index); app.use(usersRoutes); app.use(authRoutes); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app; 

有谁知道我为什么有这个回应? 我尝试使用在失眠症上使用电子邮件和密码的post方法,

谢谢 !

默认情况下,LocalStrategy希望在名为username和password的参数中查找凭据。 ( 护照在Github当地 )。

所以你需要编辑这一行,并将usernameField设置为email

 passport.use("local-register", new LocalStrategy({passReqToCallback: false, usernameField: 'email'}, register)) 

在第4行的passport.js文件中,确保您结束您的行;

const LocalStrategy = require('passport-local');

您也可以单独validation您的个人信息

 passport.use(new LocalStrategy((email, password, done) => { User.getUserByEmail(email, (err, email) => { if(err) throw err; if(!email){ return done(null, false, {message: 'Incorrect Username/Email'}); } User.comparePassword(password, user.password, (err, isMatch)=>{ if(err) return done(err); if(isMatch){ return done(null, email); } else { return done(null, false, {message: 'Invalid Password'}); } }); }) })); 

尝试坚持写一个你的代码的方式,ES6或ES5。 而当使用ES6时,我会build议你使用'use strict'来帮助你彻底检查你的代码是否有错误。