req.isauthenticated总是返回false

发布于 2025-02-10 05:35:16 字数 3318 浏览 2 评论 0原文

    if (process.env.NODE_ENV !== "production") {
      require("dotenv").config();
    }
    
    const express = require("express");
    const app = express();
    const bcrypt = require("bcrypt");
    const passport = require("passport");
    const flash = require("express-flash");
    const session = require("express-session");
    
    const initializePassport = require("/sandbox/project/passport-config");
    
    initializePassport(
      passport,
      (email) => users.find((user) => user.email === email),
      (id) => users.find((user) => user.id === id)
    );
    
    const users = [];
    
    app.set("view-engine", "ejs");
    app.use(express.urlencoded({ extended: false }));
    app.use(flash());
    app.use(
      session({
        secret: process.env.SESSION_SECRET,
        resave: false,
        saveUninitialized: false
      })
    );
    app.use(passport.initialize());
    app.get("/", checkAuthenticated, (req, res) => {
      res.render("index.ejs", { name: "Saleh Khatri" });
    });
    
    app.get("/login", (req, res) => {
      res.render("login.ejs");
    });
    
    app.post(
      "/login",
      passport.authenticate("local", {
        successRedirect: "/",
        failureRedirect: "/login",
        failureFlash: true
      })
    );
    
    app.get("/register", (req, res) => {
      res.render("register.ejs");
    });
    
    app.post("/register", async (req, res) => {
      try {
        const hashedpassword = await bcrypt.hash(req.body.password, 10);
        users.push({
          id: Date.now().toString(),
          name: req.body.name,
          email: req.body.email,
          password: hashedpassword
        });
        res.redirect("/login");
      } catch {
        res.redirect("/register");
      }
    });
    
    function checkAuthenticated(req, res, next) {
      if (req.isAuthenticated()) {
        console.log("Authenticated");
        return next();
      } else {
        console.log("Not Authenticated");
        res.redirect("/login");
      }
    }
    
    app.listen(3000);
    
    
    
//even though i enter correct email and password it displays Not Authenticated
    
    passport-config code:
    const LocalStrategy = require("passport-local").Strategy;
    const bcrypt = require("bcrypt");
    
    function 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 (await bcrypt.compare(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) => {
        return done(null, getUserById(id));
      });
    }`enter code here`
    
    module.exports = initialize;

//试图从小时开始进行调试,我是一个绝对的初学者,所以我不知道 //即使我输入正确的电子邮件和密码,它即使返回evertimne也没有身份验证

    if (process.env.NODE_ENV !== "production") {
      require("dotenv").config();
    }
    
    const express = require("express");
    const app = express();
    const bcrypt = require("bcrypt");
    const passport = require("passport");
    const flash = require("express-flash");
    const session = require("express-session");
    
    const initializePassport = require("/sandbox/project/passport-config");
    
    initializePassport(
      passport,
      (email) => users.find((user) => user.email === email),
      (id) => users.find((user) => user.id === id)
    );
    
    const users = [];
    
    app.set("view-engine", "ejs");
    app.use(express.urlencoded({ extended: false }));
    app.use(flash());
    app.use(
      session({
        secret: process.env.SESSION_SECRET,
        resave: false,
        saveUninitialized: false
      })
    );
    app.use(passport.initialize());
    app.get("/", checkAuthenticated, (req, res) => {
      res.render("index.ejs", { name: "Saleh Khatri" });
    });
    
    app.get("/login", (req, res) => {
      res.render("login.ejs");
    });
    
    app.post(
      "/login",
      passport.authenticate("local", {
        successRedirect: "/",
        failureRedirect: "/login",
        failureFlash: true
      })
    );
    
    app.get("/register", (req, res) => {
      res.render("register.ejs");
    });
    
    app.post("/register", async (req, res) => {
      try {
        const hashedpassword = await bcrypt.hash(req.body.password, 10);
        users.push({
          id: Date.now().toString(),
          name: req.body.name,
          email: req.body.email,
          password: hashedpassword
        });
        res.redirect("/login");
      } catch {
        res.redirect("/register");
      }
    });
    
    function checkAuthenticated(req, res, next) {
      if (req.isAuthenticated()) {
        console.log("Authenticated");
        return next();
      } else {
        console.log("Not Authenticated");
        res.redirect("/login");
      }
    }
    
    app.listen(3000);
    
    
    
//even though i enter correct email and password it displays Not Authenticated
    
    passport-config code:
    const LocalStrategy = require("passport-local").Strategy;
    const bcrypt = require("bcrypt");
    
    function 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 (await bcrypt.compare(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) => {
        return done(null, getUserById(id));
      });
    }`enter code here`
    
    module.exports = initialize;

//trying to debug it since hour and i am an absolute beginer so i have no idea
//it return not authenticated evertimne even though i enter correct email and password

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魔法少女 2025-02-17 05:35:16

首先,一旦服务器开始在端口上侦听时,该功能将立即执行。在函数和全局范围中,用户,<代码>电子邮件,id变量存在。

initializePassport(
  passport,
  email) => users.find((user) => user.email === email), // email == undefined, user == undefined
  id) => users.find((user) => user.id === id) // id == undefined
);

其次,您试图在请求对象上调用iSauthenticated()方法,该方法未声明或表达。

function checkAuthenticated(req, res, next) {
   if (req.isAuthenticated()) { // req.isAuthenticated() == undefined, which is false
     console.log("Authenticated");
     return next();
   else {
     console.log("Not Authenticated"); // Therefore, this line is executed
     res.redirect("/login");
   }
}

我无法为您提供解决方案,因为我无法访问您的代码,或者我不知道您创建了哪些中间件会影响请求/响应对象。

我希望,它可以帮助您调试问题。祝你好运!

First of all, this function is immediately executed once server starts listening on the port. Neither in function nor global scopes the user, email, id variables exist.

initializePassport(
  passport,
  email) => users.find((user) => user.email === email), // email == undefined, user == undefined
  id) => users.find((user) => user.id === id) // id == undefined
);

Secondly, you are trying to call an isAuthenticated() method, which isn't declared or expressed, on the request object.

function checkAuthenticated(req, res, next) {
   if (req.isAuthenticated()) { // req.isAuthenticated() == undefined, which is false
     console.log("Authenticated");
     return next();
   else {
     console.log("Not Authenticated"); // Therefore, this line is executed
     res.redirect("/login");
   }
}

I can not deliver the solution for you since I've no access to your code or I don't know which middleware you've created which affects request/response objects.

I hope, it helps you to debug the problem. Good luck!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文