Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当用户使用Node和mongo登录时,无法访问特定路由,而是将_id获取为未定义?_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 当用户使用Node和mongo登录时,无法访问特定路由,而是将_id获取为未定义?

Javascript 当用户使用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

我想在用户登录时访问配置文件路由,但我无法访问配置文件,因为我得到的_id未定义。 我能够成功登录,获得令牌。我尝试使用“GET”方法和postman中的token访问/配置路由,然后我得到了未定义的_id

控制器/auth.js

 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
    }
}