Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js PassportJS未对用户进行身份验证_Node.js_Express_Passport.js - Fatal编程技术网

Node.js PassportJS未对用户进行身份验证

Node.js PassportJS未对用户进行身份验证,node.js,express,passport.js,Node.js,Express,Passport.js,当我在Express中使用PassportJS时,它似乎不会对用户进行身份验证。最终我会使用bcryptjs来处理这个问题,但我只想让它在没有它的情况下工作。我有两个用.ejs编写的表单,注册表单可以正常工作,但是当用户登录主页时,他们应该会看到自己的名字。但它只是重定向到主页登录屏幕 注册-form.ejs: <!DOCTYPE html> <html lang="en"> <head> <meta charset="

当我在Express中使用PassportJS时,它似乎不会对用户进行身份验证。最终我会使用bcryptjs来处理这个问题,但我只想让它在没有它的情况下工作。我有两个用.ejs编写的表单,注册表单可以正常工作,但是当用户登录主页时,他们应该会看到自己的名字。但它只是重定向到主页登录屏幕

注册-form.ejs:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
  <h1>Sign Up</h1>
  <form action="" method="POST">
    <label for="username">Username</label>
    <input name="username" placeholder="username" type="text" />
    <label for="password">Password</label>
    <input name="password" type="password" />
    <button>Sign Up</button>
  </form>
</body>
</html>
不确定为什么用户没有使用用户名重定向到主屏幕,而是重定向到通用登录屏幕。注册表单可以在MongoDB上存储用户名和密码。感谢您的帮助

<!DOCTYPE html>
<html lang='en'>
  <head>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <% if (user) {%>
      <h1>WELCOME BACK <%= user.username %></h1>
      <a href="/log-out">LOG OUT</a>
    <% } else { %>
      <h1>please log in</h1>
      <form action="/log-in" method="POST">
        <label for="username">Username</label>
        <input name="username" placeholder="username" type="text" />
        <label for="password">Password</label>
        <input name="password" type="password" />
        <button>Log In</button>
      </form>
    <%}%>
  </body>
</html>
const createError = require('http-errors');
const express = require('express');
const session = require('express-session');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const mongoose = require('mongoose');
const Schema = require('mongoose').Schema;
const dotenv = require('dotenv').config();
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const helmet = require('helmet');

mongoose.connect(process.env.MONGODB_URI, {useUnifiedTopology: true, useNewUrlParser: true});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'mongo connection error'));

const User = mongoose.model(
  "User",
  new Schema({
    username: { type: String, required: true },
    password: { type: String, required: true }
  })
);

// const indexRouter = require('./routes/index');
// const usersRouter = require('./routes/users');
// const signupRouter = require('./routes/sign-up-form');
const app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

passport.use(
  new LocalStrategy((username, password, done) => {
    User.findOne({ username: username }, (err, user) => {
      if (err) { 
        return done(err);
      };
      if (!user) {
        return done(null, false, { message: "Incorrect username" });
      }
      if (user.password !== password) {
        return done(null, false, { message: "Incorrect password" });
      }
      return done(null, user);
    });
  })
);

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

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

app.use(session({secret: 'cats', resave: false, saveUninitialized: true}));
app.use(passport.initialize());
app.use(passport.session());

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false })); /*Cannot post extended object*/
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(helmet());

app.get("/", (req, res) => res.render("index", {user: req.user}));

app.get("/sign-up-form", (req, res) => res.render("sign-up-form"));

app.post("/sign-up-form", (req, res, next) => {
  const user = new User({
    username: req.body.username,
    password: req.body.password
  }).save(err => {
    if (err) { 
      return next(err);
    };
    res.redirect("/");
  });
});

app.post(
  "/log-in",
  passport.authenticate("local", {
    successRedirect: "/",
    failureRedirect: "/"
  })
);

app.get("/log-out", (req, res) => {
  req.logout();
  res.redirect("/");
});

// app.use('/', indexRouter);
// app.use('/users', usersRouter);
// app.use('/sign-up-form', signupRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// 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;