Javascript 当用户使用Node和mongo登录时,无法访问特定路由,而是将_id获取为未定义?
我想在用户登录时访问配置文件路由,但我无法访问配置文件,因为我得到的_id未定义。 我能够成功登录,获得令牌。我尝试使用“GET”方法和postman中的token访问/配置路由,然后我得到了未定义的_id 控制器/auth.jsJavascript 当用户使用Node和mongo登录时,无法访问特定路由,而是将_id获取为未定义?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我想在用户登录时访问配置文件路由,但我无法访问配置文件,因为我得到的_id未定义。 我能够成功登录,获得令牌。我尝试使用“GET”方法和postman中的token访问/配置路由,然后我得到了未定义的_id 控制器/auth.js const User = require("../models/user"); const shortId = require("shortid"); const jwt = require("jso
const User = require("../models/user");
const shortId = require("shortid");
const jwt = require("jsonwebtoken");
const expressJwt = require("express-jwt");
exports.signin = (req, res) => {
const { email, password } = req.body;
// check if user exist
User.findOne({ email }).exec((err, user) => {
if (err || !user) {
return res.status(400).json({
error: "User with that email doesn't exist. Please signup",
});
}
// authenticate
if (!user.authenticate(password)) {
return res.status(400).json({
error: "Email and password do not match",
});
}
// generate a token and send to client
const token = jwt.sign({ _id: user._id }, process.env.JWT_SECRET, {
expiresIn: "1d",
});
res.cookie("token", token, { expiresIn: "1d" });
const { _id, username, name, email, role } = user;
return res.json({
token,
user: { _id, username, name, email, role },
});
});
};
exports.requireSignin = expressJwt({
secret: process.env.JWT_SECRET,
algorithms: ["HS256"], // added later
userProperty: "auth",
});
exports.authMiddleware = (req, res, next) => {
const authUserId = req.user._id; // _id is getting undefined here
User.findById({ _id: authUserId }).exec((err, user) => {
if (err || !user) {
return res.status(400).json({
error: "User not found",
});
}
req.profile = user;
next();
});
};
routes/user.js
const express = require("express");
const router = express.Router();
const { requireSignin, authMiddleware } = require("../controllers/auth");
const { read } = require("../controllers/user");
router.get("/profile", requireSignin, authMiddleware, read);
module.exports = router;
server.js
const express = require("express");
const morgan = require("morgan");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const cors = require("cors");
const mongoose = require("mongoose");
require("dotenv").config();
// bring routes
const authRoutes = require("./routes/auth");
const userRoutes = require("./routes/user");
// app
const app = express();
// db
mongoose
.connect(process.env.DATABASE_CLOUD, {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
})
.then(() => console.log("DB connected"))
.catch((err) => {
console.log(err);
});
// middlewares
app.use(morgan("dev"));
app.use(bodyParser.json());
app.use(cookieParser());
// cors
if (process.env.NODE_ENV === "development") {
app.use(cors({ origin: `${process.env.CLIENT_URL}` }));
}
// routes middleware
app.use("/api", authRoutes);
app.use("/api", userRoutes);
// port
const port = process.env.PORT || 8000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
下面是用户成功登录时得到的响应
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZjhmODY5NGRjNGIzYjMyMDgxZDRmNDMiLCJpYXQiOjE2MDMzMjk1MDEsImV4cCI6MTYwMzQxNTkwMX0.0KLpXcunuxcXHrD3DD6i1Fky1CRpF4f4Fnw_NufsNdU",
"user": {
"_id": "5f8f8694dc4b3b32081d4f43",
"username": "qjnsttfxf",
"name": "vishal",
"email": "vishak@test.com",
"role": 0
}
}