'TypeError: Невозможно прочитать свойство' isAuthenticated 'of undefined' после запроса passport.js - PullRequest
0 голосов
/ 01 июля 2019

Я хочу проверить, что пользователь прошел аутентификацию, прежде чем он сможет получить доступ к маршруту user/profile.Для этого я использовал isAuthenticated() из паспорта.

Но когда я набрал npm start, терминал ответил TypeError: Cannot read property 'isAuthenticated' of undefined.В чем здесь проблема?

Мой маршрут пользователя users.js:

var express = require('express');
var router = express.Router();
var csrf = require("csurf");
var passport = require("passport");

const {check, validationResult} = require('express-validator');

var csrfProtection = csrf();
router.use(csrfProtection);

// User Signup
router.get("/signup", (req, res, next) => {
    var messages = req.flash("error");
    res.render("user/signup", {csrfToken: req.csrfToken(), messages: messages, hasErrors: messages.length > 0});
  });

  router.post("/signup",
  [
    check('email', 'Your email is not valid').not().isEmpty().isEmail().normalizeEmail(),
    check('password', 'Your password must be at least 5 characters').not().isEmpty().isLength({min: 5})
  ],
  function (req, res) {
    const errors = validationResult(req);
    console.log(req.body);

    if (!errors.isEmpty()) {
      return res.status(422).jsonp(errors.array())
    } else {
      passport.authenticate("local.signup", {
        successRedirect: "/user/profile",
        failureRedirect: "/user/signup",
        failureFlash: true
      })(req, res);
    }
  });

  // User signin
  router.get("/signin", (req, res, next) => {
    var messages = req.flash("error");
    res.render("user/signin", {csrfToken: req.csrfToken(), messages: messages, hasErrors: messages.length > 0});
  });

  router.post("/signin",
  [
    check('email', 'Your email is not valid').not().isEmpty().isEmail().normalizeEmail(),
    check('password', 'Your password must be at least 5 characters').not().isEmpty()
  ],
  function (req, res) {
    const errors = validationResult(req);
    console.log(req.body);

    if (!errors.isEmpty()) {
      return res.status(422).jsonp(errors.array())
    } else {
      passport.authenticate("local.signin", {
        successRedirect: "/user/profile",
        failureRedirect: "/user/signin",
        failureFlash: true
      })(req, res);
    }
  });

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated()) {
    return next();
  }
    res.redirect("/");
}

// User profile
router.get("/profile", isLoggedIn(), (req, res, next) => {
    res.render("user/profile");
});

router.get("/logout", function(req, res, next) {
    req.logout();
    res.redirect("/");
});

  module.exports = router;

Сообщение об ошибке:

/mnt/e/CODING/Templates/leaftunehoney/SC2/routes/users.js:64
    if (req.isAuthenticated()) {
            ^

TypeError: Cannot read property 'isAuthenticated' of undefined
    at isLoggedIn (/mnt/e/CODING/Templates/leaftunehoney/SC2/routes/users.js:64:13)
    at Object.<anonymous> (/mnt/e/CODING/Templates/leaftunehoney/SC2/routes/users.js:71:24)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/mnt/e/CODING/Templates/leaftunehoney/SC2/app.js:15:18)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)

1 Ответ

0 голосов
/ 01 июля 2019

isLoggedIn - это функция. Откуда взято требование re, res в определении функции?

Это вызов функции, поэтому внутри функции req не определено , поскольку в функцию не передается параметр и, следовательно, строка, в которой вы использовали: if (req.isAuthenticated ())

появляется ошибка: невозможно прочитать свойство isAuthenticated из undefined.

...