Req.user не определен в API-маршрутах - PullRequest
0 голосов
/ 17 апреля 2019

Я не понимаю, почему req.user не определен в моих маршрутах API. У меня есть специальное промежуточное ПО для установки паспорта с именем auth, которое инициализирует паспорт и сеанс.

Я сделал одно дополнительное промежуточное ПО, чтобы посмотреть, определено ли перед вызовом API req.user, и так ли это. Но когда мне это нужно в маршруте API, оно не определено.

Server.js

...
    server.use(cookieParser());

    server.use(bodyParser.json());
    server.use(bodyParser.urlencoded({ extended: true }));

    server.use(
      session({
        secret: process.env.COOKIE_SECRET,
        resave: true,
        saveUninitialized: false,
        store: new MongoStore({ mongooseConnection: mongoose.connection })
      })
    );

    server.use(auth.initialize);
    server.use(auth.session);
    server.use(auth.setUser);

    //API ROUTES
    server.use("/user", require("./api/routes/user"));
    server.use("/youtuber", require("./api/routes/youtuber"));
...

Auth.js

const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const UserModel = require("../api/models/user");

passport.use(
  new LocalStrategy(
    { usernameField: "email" },
    async (username, password, done) => {
      try {
        const user = await UserModel.findOne({ email: username }).exec();
        if (!user) {
          return done(null, false, { message: "Invalid username or password" });
        }
        const passwordOK = await user.comparePassword(password);
        if (!passwordOK) {
          return done(null, false, { message: "Invalid username or password" });
        }
        return done(null, user);
      } catch (err) {
        return done(err);
      }
    }
  )
);

// eslint-disable-next-line no-underscore-dangle
passport.serializeUser((user, done) => {
  console.log("serializing user: ");
  console.log(user);
  done(null, user._id);
});

passport.deserializeUser(async (id, done) => {
  try {
    const user = await UserModel.findById(id).exec();
    return done(null, user);
  } catch (err) {
    return done(err);
  }
});

module.exports = {
  initialize: passport.initialize(),
  session: passport.session(),
  setUser: (req, res, next) => {
    console.log(req.user, req.isAuthenticated());  //<-- HERE IT IS DEFINED
    return next();
  }
};

Пользователь API / checkLogin

function isAuthenticated(req, res, next) {
  if (req.isAuthenticated()) return next();
  else
    return res.status(401).json({
      error: "User not authenticated"
    });
}

...

router.get("/checklogin", isAuthenticated, (req, res, next) => {
  res.status(200).json({
    message: "User logged in correctly",
    redirect: "/dashboard"
  });
});
...