req.isauthenticated总是返回false
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,一旦服务器开始在端口上侦听时,该功能将立即执行。在函数和全局范围中,
用户
,<代码>电子邮件,id
变量存在。其次,您试图在请求对象上调用
iSauthenticated()
方法,该方法未声明或表达。我无法为您提供解决方案,因为我无法访问您的代码,或者我不知道您创建了哪些中间件会影响请求/响应对象。
我希望,它可以帮助您调试问题。祝你好运!
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.Secondly, you are trying to call an
isAuthenticated()
method, which isn't declared or expressed, on the request object.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!