![](/img/trans.png)
[英]TypeError: Cannot read property 'headersSent' of undefined when using Passport.js
[英]'TypeError: Cannot read property 'isAuthenticated' of undefined' after requiring passport.js
我想檢查用戶是否已通過身份驗證,然后才能訪問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)
isLoggedIn是一個函數。 函數定義從哪里請求?
這是一個函數調用,這就是為什么在函數內部未定義req的原因,因為沒有參數傳遞給該函數,因此沒有使用該行:if(req.isAuthenticated())
錯誤即將來臨:無法讀取未定義的屬性'isAuthenticated'。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.