req.user只有用户名字段
我是护照JS的新手。当我委托时使用它时,它仅显示用户名字段。它始终将输出作为{用户名:'a'}。它没有显示任何其他字段,例如电子邮件。
这是index.js文件:
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const Routes = require("./api/Routes");
const session = require("express-session");
const MongoDBStore = require("connect-mongodb-session")(session);
const passport = require("passport");
const http = require("http");
const cors = require("cors");
const cookieParser = require("cookie-parser");
require("dotenv").config();
mongoose
.connect(process.env.MONGO_URL)
.then(() => {
console.log("DB Connected");
})
.catch((err) => {
console.log(err);
});
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
if (process.env.NODE_ENV === "production") {
app.set("trust proxy", 1);
}
app.use(
cors({
origin: "http://localhost:3000",
credentials: true,
})
);
const storeMongo = new MongoDBStore({
uri: process.env.MONGO_URL,
collection: "mySessions",
});
app.use(
session({
name: "Test Cookie",
secret: "ThisIsASecret",
resave: true,
saveUninitialized: true,
proxy: process.env.NODE_ENV === "production",
cookie: {
sameSite: process.env.NODE_ENV === "production" ? "none" : "lax",
maxAge: 1000 * 60 * 100,
secure: process.env.NODE_ENV === "production",
},
store: storeMongo,
})
);
app.use(cookieParser());
app.use(passport.initialize());
app.use(passport.session());
require("./passport-config")(passport);
app.use(Routes);
const server = http.createServer(app);
const port = process.env.PORT || 8000;
server.listen(port, () => {
console.log(`Server running at port ${port}`);
});
这是Passport-config.js文件:
const User = require("./models/User");
const bcrypt = require("bcryptjs");
const localStrategy = require("passport-local").Strategy;
module.exports = function (passport) {
passport.use(
new localStrategy((username, password, done) => {
User.findOne({ username: username }, (err, user) => {
if (err) throw err;
if (!user) return done(null, false);
bcrypt.compare(password, user.password, (err, result) => {
if (err) throw err;
if (result === true) {
return done(null, user);
} else {
return done(null, false);
}
});
});
})
);
passport.serializeUser((user, cb) => {
console.log("in serialize");
console.log(user);
cb(null, user.id);
});
passport.deserializeUser((id, cb) => {
User.findOne({ _id: id }, (err, user) => {
const userInformation = {
username: user.username,
};
cb(err, userInformation);
});
});
};
这是用户模型:
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema(
{
username: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
email: {
type: String,
trim: true,
required: true,
},
},
{
timestamps: true,
}
);
const User = mongoose.model("User", userSchema);
module.exports = User;
任何人都可以告诉我我的代码有什么问题。
I am new to passport js. While using it when I console.log req.user it only shows username field. It always gives output as { username: 'a' }. It does not show any other field like email.
Here is the index.js file:
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const Routes = require("./api/Routes");
const session = require("express-session");
const MongoDBStore = require("connect-mongodb-session")(session);
const passport = require("passport");
const http = require("http");
const cors = require("cors");
const cookieParser = require("cookie-parser");
require("dotenv").config();
mongoose
.connect(process.env.MONGO_URL)
.then(() => {
console.log("DB Connected");
})
.catch((err) => {
console.log(err);
});
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
if (process.env.NODE_ENV === "production") {
app.set("trust proxy", 1);
}
app.use(
cors({
origin: "http://localhost:3000",
credentials: true,
})
);
const storeMongo = new MongoDBStore({
uri: process.env.MONGO_URL,
collection: "mySessions",
});
app.use(
session({
name: "Test Cookie",
secret: "ThisIsASecret",
resave: true,
saveUninitialized: true,
proxy: process.env.NODE_ENV === "production",
cookie: {
sameSite: process.env.NODE_ENV === "production" ? "none" : "lax",
maxAge: 1000 * 60 * 100,
secure: process.env.NODE_ENV === "production",
},
store: storeMongo,
})
);
app.use(cookieParser());
app.use(passport.initialize());
app.use(passport.session());
require("./passport-config")(passport);
app.use(Routes);
const server = http.createServer(app);
const port = process.env.PORT || 8000;
server.listen(port, () => {
console.log(`Server running at port ${port}`);
});
Here is the passport-config.js file:
const User = require("./models/User");
const bcrypt = require("bcryptjs");
const localStrategy = require("passport-local").Strategy;
module.exports = function (passport) {
passport.use(
new localStrategy((username, password, done) => {
User.findOne({ username: username }, (err, user) => {
if (err) throw err;
if (!user) return done(null, false);
bcrypt.compare(password, user.password, (err, result) => {
if (err) throw err;
if (result === true) {
return done(null, user);
} else {
return done(null, false);
}
});
});
})
);
passport.serializeUser((user, cb) => {
console.log("in serialize");
console.log(user);
cb(null, user.id);
});
passport.deserializeUser((id, cb) => {
User.findOne({ _id: id }, (err, user) => {
const userInformation = {
username: user.username,
};
cb(err, userInformation);
});
});
};
Here is the user model:
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema(
{
username: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
email: {
type: String,
trim: true,
required: true,
},
},
{
timestamps: true,
}
);
const User = mongoose.model("User", userSchema);
module.exports = User;
Can anyone tell me what is wrong with my code.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果要将其他属性添加到
req.user
中,则应在deserializeuser
函数中指定它们:您可以找到
serializeizeuser
的描述性说明。deserializeuser
在此答案。If you want to add other properties to
req.user
you should specify them in thedeserializeUser
function:You can find a descriptive explanation of how
serializeUser
anddeserializeUser
work on this answer.