Node.js страница авторизации с использованием passport-local и bcryptjs - PullRequest
0 голосов
/ 22 января 2020

У меня есть базовая страница авторизации входа в систему c, но всякий раз, когда я пытаюсь войти в систему, страница просто перезагружается, я относительно новичок в этом и мне действительно нужна помощь.

сервер. js ?

const express = require("express");
const fs = require("fs");
const path = require("path");
const passport = require("passport");
const session = require("express-session");
const initializePasspost = require("./passport-config");
const flash = require("express-flash");
const bcrypt = require("bcryptjs");

initializePasspost(
  passport,
  email => users.find(user => user.email === email),
  id => users.find(user => user.id === id)
);

let data = fs.readFileSync("./files/users.json");
let userData = JSON.parse(data);

app.set("view-engine", "ejs");

app.use(express.urlencoded({ extended: false }));
app.use("/assets", express.static(path.join(__dirname, "/assets")));
app.use("/script", express.static(path.join(__dirname, "/script")));

app.use(flash());

app.use(
  session({
    secret: "woff",
    resave: false,
    saveUninitialized: false
  })
);
app.use(passport.initialize());
app.use(passport.session());

// Middleware
const checkAuthenticated = (req, res, next) => {
  if (req.isAuthenticated()) {
    return next();
  }
  res.redirect("/admin");
};
const checkNotAuthenticated = (req, res, next) => {
  if (req.isAuthenticated()) {
    return res.redirect("/");
  }
  next();
};

app.get("/test", checkAuthenticated, (req, res) => res.render("test.ejs"));

app.get("/register", checkNotAuthenticated, (req, res) =>
  res.render("register.ejs")
);

app.post(
  "/adminLogin",
  passport.authenticate("local", {
    successRedirect: "/test",
    failureRedirect: "/adminLogin",
    failureFlash: true
  }),
  (req, res) => {}
);

const PORT = process.env.PORT || 3000;

app.listen(PORT, err => {
  console.log(`Server Running at port: ${PORT}`);
});

Я знаю, что я не лучший или оптимальный кодер, но мне нужна помощь.

passport-config. js ?

const bcrypt = require("bcryptjs");
const LocalStrategy = require("passport-local").Strategy;

const initialize = (passport, getUserByEmail, getUserById) => {
  const authenticateUser = async (email, password, done) => {
    const user = getUserByEmail(email);
    if (user == null) {
      return done(null, false, { message: "No user with that email" });
    }
    try {
      if (bcrypt.compareSync(password, user.password)) {
        return done(null, user);
      } else {
        return done(null, false, { message: "password Incorrect" });
      }
    } catch (e) {
      return done(e);
    }
  };
  passport.use(new LocalStrategy({ usernameField: "email" }, authenticateUser));
  passport.serializeUser((user, done) => done(null, user.id));
  passport.deserializeUser((id, done) => done(null, getUserById(id)));
};

module.exports = initialize;

Я бы установил bcrypt, но возникла проблема при его установке, поэтому я выбрал bcrypt js.

Я получил некоторый код из учебника YouTube. Я не знаю что делать Пожалуйста помоги. Я застрял на этом больше недели.

...