Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Passport无法读取属性';密码';未定义的_Javascript_Node.js_Mongodb_Authentication_Passport.js - Fatal编程技术网

Javascript Passport无法读取属性';密码';未定义的

Javascript Passport无法读取属性';密码';未定义的,javascript,node.js,mongodb,authentication,passport.js,Javascript,Node.js,Mongodb,Authentication,Passport.js,我目前正在使用Express、Node、Mongoose和Passport.js开发一个注册和登录系统,注册基本正常(除了successRedirect不工作),但登录系统存在一个大问题。由于某种原因,我创建的passport方法无法读取未定义的“密码”,因此出现了未定义的情况,但我似乎无法理解。另外,如果有人知道为什么我的注册路径上的成功重定向不起作用,我们将不胜感激 Passport配置文件: var LocalStrategy = require("passport-local&

我目前正在使用Express、Node、Mongoose和Passport.js开发一个注册和登录系统,注册基本正常(除了successRedirect不工作),但登录系统存在一个大问题。由于某种原因,我创建的passport方法无法读取未定义的“密码”,因此出现了未定义的情况,但我似乎无法理解。另外,如果有人知道为什么我的注册路径上的成功重定向不起作用,我们将不胜感激

Passport配置文件:

var LocalStrategy = require("passport-local").Strategy;
const User = require("../user");
const passport = require("passport");
const crypto = require("crypto");

//Signup method

module.exports = (passport) => {
  passport.serializeUser((user, done) => {
    done(null, user.id);
  });

  passport.deserializeUser((id, done) => {
    User.findById(id, (err, user) => {
      done(err, user);
    });
  });
};

passport.use(
  "local-signup",
  new LocalStrategy(
    {
      usernameField: "email",
      passwordField: "password",
      passReqToCallback: true,
    },
    (req, email, password, done) => {
      process.nextTick(() => {
        User.findOne({ email: email }, (err, user) => {
          if (err) {
            return done(err);
          }

          if (user) {
            return done(
              null,
              false,
              req.flash("signupMessage", "That email is already taken.")
            );
          } else {
            let token = crypto.randomBytes(64).toString("hex");
            const user = new User();
            user.name = req.body.username;
            user.email = email;
            user.password = user.generateHash(password);
            user.verificationHash = token;
            user.save();
          }
        });
      });
    }
  )
);

// Login method

passport.use(
  "local-login",
  new LocalStrategy(
    {
      usernameField: "email",
      passwordField: "password",
      passReqToCallback: true,
    },
    (req, email, password, done) => {
      User.findOne({ email: email }, (err, user) => {
        if (err) {
          return done(err);
        }

        if (!user) {
          return done(null, false, req.flash("loginMessage", "No user found."));
        }
        if (!user.validPassword(password)) {
          return done(
            null,
            false,
            req.flash("loginMessage", "Oops! Wrong password")
          );
        }
        return done(null, user);
      });
    }
  )
);
index.js路由:

app
  .route("/register")
  .get((req, res) => {
    res.render("register", { message: req.flash("signupMessage") });
  })
  .post(
    passport.authenticate("local-signup", {
      successRedirect: "/verify/emailSent",
      failureRedirect: "/register",
      failureFlash: true,
    }),
    (req, res) => {
    }
  );

app
  .route("/login")
  .get((req, res) => {
    res.render("login", { message: req.flash("loginMessage") });
  })
  .post(
    passport.authenticate("local-login", {
      successRedirect: "/verify/emailSent",
      failureRedirect: "/login",
      failureFlash: true,
    }),
    (req, res) => {
      //if this gets called authentication was succesful.
      //req.user is the authenticated user
    }
  );
登录文件:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Login</title>
  </head>
  <body>
    <h1>Login</h1>

    <% if (message.length > 0) { %>
      <div class="alert alert-danger"><%= message %></div>
  <% } %>
  
    <form action="/login" method="POST">
      <label for="email">Email</label>
      <input type="email" name="email" id="email" required />
      <label for="password">Password</label>
      <input type="password" name="password" id="password" required />
      <button type="submit">Log in</button>
    </form>
    <a href="/register">Register</a>
    <a href="/">Home</a>
  </body>
</html>

登录
登录
0) { %>
电子邮件
密码
登录

This:
user.password
是您唯一使用的
.password
位置。
user
包含什么?您是否尝试放置
控制台.log(用户);
看看里面有什么?我的坏,完全忘了共享我的模式。
user.password
将来自存储在user.js文件中的模式,该文件有一个密码字段。因此,当我创建一个新的
user
并将其分配给变量
user
时,我正在将密码传递给该模式。我的坏之处在于没有包含密码字段。to回答您的问题,用户将是另一个文件中的预制架构。@PraveenOkay,我明白了。但是当您放置
console.log(user);
时,那里发生了什么事?您是否得到了您不期望的结果?