当前位置: 首页 > 知识库问答 >
问题:

TypeError:无法读取未定义Passpor错误的属性“name”

章飞章
2023-03-14

我正在制作一个登录和注册页面。我正在使用护照进行身份验证。我也在使用mongos se。一切都很好,但是我不知道为什么user.name未定义。我尝试了在堆栈上找到的与此问题相关的每个解决方案,但都不匹配。

router.js

    require('dotenv').config()
}

const bcrypt = require('bcrypt')
const path = require('path');
const express = require('express');
const User = require('../models/user');
const passport = require('passport');
const initializePassport = require('./passport-config')
const flash = require('express-flash')
const session = require('express-session');
const { JsonWebTokenError } = require('jsonwebtoken');
require('./db/mongoose');



const app = express();

const port = process.env.PORT || 3000;
const publicDirectoryPath = path.join(__dirname, '../html" target="_blank">public');
const viewsPath = path.join(__dirname, '../views');

initializePassport(
    passport,
    async(email)=>await User.findOne({email: email}),
    async(id)=>await User.findById(id).then(console.log())
)


app.set('view engine', 'ejs');
app.set('views', viewsPath);


app.use(express.static(publicDirectoryPath));
app.use(express.urlencoded({extended: false}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session())



app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false
}));

app.get('/registration',(req, res) => {
    res.render('registration.ejs');
})

app.get('/login',(req, res) => {
    res.render('login.ejs')
})

app.get('/menu',(req, res) => {
    res.render('menu.ejs', { name: req.user.name })
})

app.post('/registration', async(req, res) => {
    try{
        const hashedPassword = await bcrypt.hash(req.body.password, 10);
        
        const newUser = new User({
            name: req.body.name,
            email: req.body.email,
            password: hashedPassword
        });

        newUser.save();

        res.redirect('/login');        

    } catch{
        res.redirect('/registration')
    }
})


app.post('/login', passport.authenticate('local', {
    successRedirect: '/menu',
    failureRedirect: '/login',
    failureFlash: true,
}))


app.listen(port, () => {
    console.log('Server is on port 3000');
})



passport配置。js公司

const bcrypt = require('bcrypt')

function initialize(passport, getUserByEmail, getUserById){
    const authenticateUser = async (email, password, done)=>{
        const user = await getUserByEmail(email)

        if(user == null){
            return done(null, false, {message: 'No existe un usuario con ese email'})
        }


        try{
            
            const matchPassword = await bcrypt.compare(password, user.password)

            if(matchPassword){
                return done(null, user)
            }else{
                return done(null, false, {message: 'Constraseña Incorrecta'})
            }
        }catch(e){
            return done(e);
        }
    }

    passport.use(new LocalStrategy({usernameField: 'email'}, authenticateUser))
    passport.serializeUser((user,done)=> done(null, user.id))
    passport.deserializeUser((id,done)=> {
        return done(null, getUserById(id))})

}

module.exports = initialize

错误如下:

TypeError:无法读取C:\Users\Miguel\Desktop\RestaurantControl\src\router上未定义的属性“name”。js:58:45,第层。handle[作为handle\u请求](C:\Users\Miguel\Desktop\RestaurantControl\node\u modules\express\lib\router\layer.js:95:5)at next(C:\Users\Miguel\Desktop\RestaurantControl\node\u modules\express\lib\router\route.js:137:13)at route。调度(C:\Users\Miguel\Desktop\RestaurantControl\node\U modules\express\lib\router\route.js:112:3)位于层。在C:\Users\Miguel\Desktop\RestaurantControl\node\u modules\express\lib\router\layer.js:95:5中处理[作为句柄\u请求](C:\Users\Miguel\Desktop\RestaurantControl\node\u modules\express\lib\router\index)。js:281:22 at函数。立即在下一个(C:\Users\Miguel\Desktop\RestaurantControl\node\u modules\express\lib\router\index.js:335:12)处理\u参数(C:\Users\Miguel\Desktop\RestaurantControl\node\u modules\express\lib\router\index.js:275:10)_位于processImmediate(内部/计时器js:460:21)的onImmediate(C:\Users\Miguel\Desktop\RestaurantControl\node\U modules\express session\index.js:502:7)

共有1个答案

梁丘威
2023-03-14
router.get('/', checkAuthorization, async (req, res) => {
    const result = await req.user
    res.render('index.ejs', data = { name: result.name}) })

如果您使用护照模块,req.user将返回promise。等待req.user异步函数。我有同样的问题,并想出了这个解决方案。

 类似资料:
  • 当我在react中工作时。当我想要侧边页时,我会显示“TypeError:不能读取未定义的属性(读取'pathname')”!

  • 如果函数在组件中,那么一切都很好。如果我把它单独取出并导出到一个组件中,那么我会得到一个错误TypeError:不能读取未定义的属性(读取'reduce')

  • 问题内容: 我试图在ajax回调从REST api接收数据后设置组件的setState。这是我的组件构造函数代码 然后,我有一个如下所示的方法。 现在,这是我执行getAJAX请求的getPosts函数。 我想设置状态,但出现以下错误。 不太清楚是什么原因造成的。如果有人指出我正确的方向,那将真的很有帮助。提前致谢。 问题答案: 还绑定回调函数,以便回调内部指向React Component的上下

  • 我试图使用node.js express web服务器中的@tensorflow/tfjs-node模块。但是,我得到了下面的错误。我不明白为什么我会出现这个错误。我刚刚在node.js服务器中添加了1行代码。我使用“npm install@tensorflow/tfjs-node”完成的安装。可能的问题是什么? null 先谢谢你, var nonMaxSuppressionV3Impl=tf.

  • 我正在尝试联系许多对许多,在两个模式“培训和培训课程”,所以我做了第三个模式“课程”,以尝试关系1对许多。但是我得到了一个错误: null TypeError:无法读取对象上未定义得属性“belongsto”。(c:UsersDellDownloadsGraphql-12.18.2020Graphql-12.18.2020Graphql-12.18.2020ServerAppDatabaseDat

  • 上面的函数返回一个类似“failed”的字符串。但是,当我尝试在其上运行then函数时,它将返回 并且光标指示在之后和。 下面是完整的功能: 更新 下面是函数 我确信将导致一个“failed”字符串。没别的了。