javascript - PassportJs req.authenticated 总是返回 false
问题描述
我正在将passportJS与节点快递应用程序一起使用。我创建了 3 条路线:
- /登录
- /登记
- /认证
现在,当用户登录成功时,req.Authenticated() 为真,但是当我导航到前端的不同路由时,这是一个反应应用程序。我得到 req.Authenticated() 错误。我正在使用基于passportjs会话的身份验证。我已经实现了 /auth 路由,因为我想从服务器端发送 isLoggedIn 字段,如果它为真,那么我将用户导航到 react-router 中的私有路由,如果 isLoggedIn 为假,则用户无权查看该网页。我在网上查看了很多资源,但没有一个有效。
护照-config.js
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const User = require("./models/user");
const bcrypt = require("bcrypt");
passport.use(
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
},
async (email, password, done) => {
try {
const user = await User.findOne({ email });
if (!user) {
return done(null, false, {
message: "Username/email not registered",
});
}
const temp = await bcrypt.compare(password, user.password);
try {
if (await bcrypt.compare(password, user.password)) {
return done(null, user);
} else {
console.log("Inside else");
return done(null, false, { message: "Password incorrect" });
}
} catch (e) {
return done(e);
}
} catch (error) {
done(error);
}
}
)
);
passport.serializeUser(function (user, done) {
// console.log("serializeUser id", user.id);
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
// console.log("deserializeUser", id);
User.findById(id, function (err, user) {
done(err, user);
});
});
用户.js:
router.post("/login", passport.authenticate("local"), async (req, res) => {
console.log("Login route");
const { email, password } = req.body;
const user = await User.findOne({ email });
if (!user) {
return res.status(409).json({
message: "User doesn't exist",
});
}
bcrypt.compare(password, user.password, (err, result) => {
if (err) {
return res.status(401).json({
message: "Auth failed",
});
}
if (result) {
console.log("result login", result);
return res.status(200).json({
userId: user._id,
message: "Login successful",
});
}
return res.status(401).json({
message: "Auth failed",
});
});
});
router.post("/register", async (req, res) => {
try {
const { email, password, type, firstName, lastName } = req.body;
const doesExist = await User.findOne({ email });
if (doesExist) {
return res.status(409).json({
message: "Email exists",
});
}
bcrypt.hash(password, 10, (err, hash) => {
if (err) {
return res.status(500).json({
error: err,
});
} else {
const newUser = new User({
email: email,
password: hash,
type: type,
firstName: firstName,
lastName: lastName,
});
newUser
.save()
.then((user) => {
console.log(user);
res.status(201).json({
message: "User created",
});
})
.catch((err) => {
console.log(err);
res.status(500).json({
error: err,
});
});
}
});
} catch (error) {
console.log("error", error);
}
});
router.get("/auth", async (req, res) => {
if (req.isAuthenticated()) {
res.status(200).json({ isLoggedIn: true });
} else {
res
.status(401)
.json({ msg: "You are not authorized to view this resource" });
}
});
server.js 文件:https ://pastebin.com/JmxQCeGS
解决方案
推荐阅读
- python - 当 2 个不同的函数调用同一个函数时会发生什么?
- asp.net - 将 Google Sign-On 与 ASP.NET 1.1 框架项目集成?
- webpack - Webpack 动态别名解析
- css - 带方向的奇怪行为:句尾的 rtl 和右大括号
- javascript - 如何在jQuery中仅打印两个特定日期之间的工作日日期?
- python - 无法使用机器人框架中定义的关键字调用类方法
- javascript - 开玩笑 - 测试给出错误 TypeError: Cannot read property 'then' of undefined
- python - Python 多处理和 MPI 多节点
- sql - 将数据从一张表迁移到多张表中
- node.js - 找不到模块'swagger_params_parser'