javascript - Node.js Passport 身份验证 - 日志未定义错误

标签 javascript node.js passport.js

我正在使用 node.js、passport 和 postgres 开发用户登录页面。我以为我的用户身份验证工作。但是,当我尝试更改页面时出现此错误并且我的服务器不会加载任何内容。 {"message":"log is not defined","error":{}}。几个小时以来,我一直被这个错误所困,无法弄清楚是什么原因造成的。我猜 session 以某种方式搞砸了,但我可能是错的。我希望有人知道答案。这是我的相关代码。

我对 Web 开发非常陌生,因此我确信它可能是我所缺少的简单东西。

ma​​in-config.js

(function(appConfig) {

'use strict';

// *** main dependencies *** //
const path = require('path');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const session = require('express-session');
const flash = require('connect-flash');
const morgan = require('morgan');
const nunjucks = require('nunjucks');
const passport = require('passport');

// *** view folders *** //
const viewFolders = [
path.join(__dirname, '..', 'views')
];

// *** load environment variables *** //
require('dotenv').config();

appConfig.init = function(app, express) {

// *** view engine *** //
nunjucks.configure(viewFolders, {
  express: app,
  autoescape: true
});
app.set('view engine', 'html');

// *** app middleware *** //
if (process.env.NODE_ENV !== 'test') {
  app.use(morgan('dev'));
}
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({
  secret: 'anything',
  resave: false,
  saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use(express.static(path.join(__dirname, '..', '..', 'client')));

  };

})(module.exports);

local.js

passport.use(new LocalStrategy({
  usernameField: 'email',
  passwordField: 'password'
  },
  (username, password, done) => {
  return db.one("SELECT * " +
    "FROM Users " +
    "WHERE Email=$1", [username])
  .then((result)=> {
    return done(null, result);
  })
  .catch((err) => {
    return done(null, false, {message:'Wrong user name or password'});
  });
}));

passport.js

module.exports = () => {

  passport.serializeUser((user, done) => {
    done(null, user.userid);
  });

  passport.deserializeUser((id, done)=>{
    log.debug("deserialize ", id);
    db.one("SELECT * FROM User " +
            "WHERE user_id = $1", id)
    .then((user)=>{
      done(null, user);
    })
    .catch((err)=>{
      done(new Error(`User with the id ${id} does not exist`));
    })
  });
};

auth.js

router.post('/login', authHelpers.loginRedirect, (req, res, next) => {
  passport.authenticate('local', (err, user, info) => {
    if (err) { handleResponse(res, 500, 'error'); }
    if (!user) {
      console.log("User Not Found");
      handleResponse(res, 404, 'User not found');
    }
    if (user) {
      req.logIn(user, function (err) {
        if (err) { handleResponse(res, 500, 'error'); }
        handleResponse(res, 200, 'success');
      });
    }
  })(req, res, next);
});

最佳答案

这是一条明确的错误消息 - log 未在 passport 的以下行中定义

log.debug("deserialize ", id);

用记录器定义你的日志对象,一切都应该是好的。或者暂时删除它。

关于javascript - Node.js Passport 身份验证 - 日志未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51663673/

相关文章:

javascript - 如何缩短 MongoDB ObjectId 并在 Mongoose 模式中使用它

node.js - 停止测试运​​行 mocha

node.js - AWS EC2 上的 Nginx、Socket.io 无访问控制允许请求资源中存在源

javascript - 如何从下拉列表中删除不需要的选项值?

javascript - 谷歌语言翻译插件无法正常工作(下拉更改事件)

javascript - 我只是无法理解 Node.JS,有什么资源和教程可以帮助我吗?

javascript - nodejs - 如何强制用户在注册后完成个人资料?

Node.js Passport 在登录时未进行身份验证

javascript - 发送特定数据到ajax

javascript - 如何在谷歌地图中心显示点动画?