password.authenticate本地策略无法获取请求正文的用户名和密码,并返回了消息“缺少凭据”

问题描述

许多时间用于阅读书籍,passport.org和stackoverflow中的类似问题。但是,仍然不知道为什么使用护照通过用户名和密码的简单本地策略进行身份验证失败。 Passport.autheticate回来了,上面写着info =“ missing credential”和user ='false“。

在进入passport.authenticate之前,确认req.body具有来自Angular的正确的用户名和密码用户信息。

此外,使用护照进行用户注册有效,但是,使用相同的用户名和密码无法登录

请在下面找到代码,并感谢您的提前帮助。

App.js (code associated with user registration and login)
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var logger = require('morgan');
var session = require('express-session');
var FileStore = require('session-file-store')(session);
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var authenticate = require('./lib-general/authenticate');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var User = require('./model/user');
var app = express();
const util = require('util');
var debug = require('debug')('http'),http = require('http'),name ='pIn3-server';

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname,'public')));
app.use(cookieParser());
app.use( bodyParser.urlencoded({ extended: true }) );
app.use(session({
  name: 'session-id',secret: config.secretKey,saveUninitialized: false,resave: false,store: new FileStore()
}));
app.use(passport.initialize());
app.use(passport.session());
app.use('/',indexRouter);
app.use('/',usersRouter);

authenticate.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('../model/user');
var JwtStrategy = require('passport-jwt').Strategy;
var ExtractJwt = require('passport-jwt').ExtractJwt;
var jwt = require('jsonwebtoken'); // used to create,sign,and verify tokens
var config = require('../config.js');

passport.use(new LocalStrategy(User.authenticate(),{passReqToCallback : true}));  
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

console.log("before getToken");

exports.getToken = function(user) {
    return jwt.sign(user,config.secretKey,{expiresIn: 3600});
};

var opts = {};
opts.jwtFromrequest = ExtractJwt.fromAuthHeaderAsBearerToken();
console.log("after jwtFromrequest - extract JWT");
console.log(opts.jwtFromrequest);
opts.secretorKey = config.secretKey;
console.log("after secretorKey");
console.log(opts.secretorKey);

exports.jwtPassport = passport.use(new JwtStrategy(opts,(jwt_payload,done) => {
        console.log("JWT payload: ",jwt_payload);
        User.findOne({_id: jwt_payload._id},(err,user) => {
            if (err) {
                return done(err,false);
            }
            else if (user) {
                return done(null,user);
            }
            else {
                return done(null,false);
            }
        });
    }));
    
exports.verifyUser = passport.authenticate('jwt',{session: false});

Users.js(用户路由器)

var express = require('express');
const bodyParser = require('body-parser');
var User = require('../model/user');
var passport = require('passport');
var authenticateMy = require('../lib-general/authenticate');  // use my to distinguish from passport authenticate
var LocalStrategy = require('passport-local').Strategy;
var cors = require('./cors');
var userRouter = express.Router();
userRouter.use(bodyParser.json());
const mongoose = require('mongoose');
const mongooseClient = require('mongoose');  /* this is important  */

console.log("step into router users");

/*ensure if it from right port of whitelist in cors:3000,3443,4200 */
userRouter.options('*',cors.corsWithOptions,(req,res) => { res.sendStatus(200); } )
/* Get users listing. */

userRouter.get('/',cors.cors,function(req,res,next){
  res.send('respond with a resource')
});

userRouter.post('/signup',next) => {
  console.log('2.0.0.1 - at register',req.body);
  let newUser = new User( {
      _id: new mongoose.Types.ObjectId(),username: req.body.username,password: req.body.password,firstName: req.body.firstName,lastName: req.body.lastName,role: req.body.role,remember: req.body.remember }); // from book
  User.register(newUser,req.body.password,user) => { 
  
    if(err) {
      console.log('2.0.0.2 - at register',err,user);
      res.statusCode = 500;
      res.setHeader('Content-Type','application/json');
      res.json({err: err});
    }
    else {
        console.log('2.0.1 - at register',req.body);
        user.save((err,user) => {
        if (err) {
            res.statusCode = 500;
            res.setHeader('Content-Type','application/json');
            res.json({err: err});
            return ;
        }
  
        passport.authenticate('local')(req,() => {
        res.statusCode = 200;
        res.setHeader('Content-Type','application/json');
        res.json({success: true,status: 'Registration Successful!'});
        });
      });
    }
  });
});

userRouter.post('/login',next) => {
  console.log('2.0.4 - at login',req.body);
  
    passport.authenticate('local',user,info) => {
    console.log('2.0.5 - at login',info);

    if (err)
      return next(err);

    if (!user) {
      res.statusCode = 401;
      res.setHeader('Content-Type','application/json');
      res.json({success: false,status: 'Login Unsuccessful!',err: info});
    }
    req.logIn(user,(err) => {
      if (err) {
        console.log('2.0.6 - at req.login',user);
        res.statusCode = 401;
        res.setHeader('Content-Type','application/json');
        res.json({success: false,err: 'Could not log in user!'});          
      }

      var token = authenticateMy.getToken({_id: req.user._id});
      res.statusCode = 200;
      res.setHeader('Content-Type','application/json');
      res.json({success: true,status: 'Login Successful!',token: token});
    }); 
  }) (req,next);
});

userRouter.get('/logout',res) => {
  console.log('in userRouter logout code')
  if (req.session) {
    req.session.destroy();
    res.clearCookie('session-id');
    res.redirect('/');
  }
  else {
    console.log('in userRouter log out ')
    var err = new Error('You are not logged in!');
    err.status = 403;
    next(err);
  }
  
});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)