【问题标题】:node.js "TypeError: Cannot read property 'auth_token' of undefined"node.js“TypeError:无法读取未定义的属性'auth_token'”
【发布时间】:2021-11-24 15:59:52
【问题描述】:

您好,当我尝试重定向到我的欢迎页面时,我收到此类型错误。尝试查找 req.cookies.auth_token 的值时,在我的 verifyToken.js 文件上调用 TypeError

另请注意,index.js 文件有很多可能与此问题无关的代码,但我将其添加到此问题中只是为了安全并确保我没有遗漏任何明显的内容。

TypeError:无法读取未定义的属性“auth_token” 在 module.exports (C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\routes\verifyToken.js:10:39) 在 Layer.handle [as handle_request] (C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\layer.js:95:5) 在下一个(C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\route.js:137:13) 在 Route.dispatch (C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\layer.js:95:5) 在 C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\index.js:335:12) 在下一个(C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\index.js:275:10) 在 urlencodedParser (C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\body-parser\lib\types\urlencoded.js:91:7) 在 Layer.handle [as handle_request] (C:\Users\Likel\Documents\GitHub\Node.js_Authenticator\node_modules\express\lib\router\layer.js:95:5)

这是我的代码

verifyToken.js

const jwt = require('jsonwebtoken');
const express = require("express");
const cookieParser = require("cookie-parser");

const app = express();

app.use(cookieParser());

module.exports = function (req,res,next){
            const token = req.cookies.auth_token;
            if (!token) {
              return res.status(403).send('Access Denied');
            }
            try {
              const data = jwt.verify(token, process.env.TOKEN_SECRET);
              req.userId = data.id;
              next();
            } catch(err) {
              return res.sendStatus(400).send('Invalid Token');
            }
    };

auth.js

//Login
router.post('/login', async (req,res) => {
    const {error} = loginValidation(req.body);
    if (error) return res.status(400).send(error.details[0].message);

    //Checking if eamil exist in database
    const user = await User.findOne({email: req.body.email});
    if(!user) return res.status(400).send('Invalid Email');

    //Check if password is correct
    const validPass = await bcrypt.compare(req.body.password, user.password);
    if(!validPass) return res.status(400).send('Invalid password')
   
    //Creat and assign json web token
    const token = jwt.sign({_id: user._id}, process.env.TOKEN_SECRET);
    return res
    .cookie("auth_token", token, {
        httpOnly: true,
        secure: process.env.TOKEN_SECRET === "production",
    })
    .status(200),
    res.redirect('/welcome');
    
});


module.exports = router;

index.js

const express = require('express');
const app = express();
const dotenv = require('dotenv');
const mongoose = require('mongoose');
const cookieParser = require('cookie-parser');
//Import Routes
const authRoute = require('./routes/auth');
const postRoute = require('./routes/posts');
const res = require('express/lib/response');
const { verify } = require('jsonwebtoken');
const verifyJsonWebToken = require('./routes/verifyToken');
const { cookie } = require('express/lib/response');

dotenv.config();


//Set views
app.set('view-engine', 'ejs')
app.use(express.urlencoded({extended: false }))


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

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

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

app.get('/welcome', verifyJsonWebToken, (req, res) => {
    res.render('welcome.ejs', { username: 'username'})
});

//Sends From Info to database
app.post('/register', authRoute);
app.post('/login', authRoute);


//Adds css to pages
app.use(express.static('public'))
app.use('/css', express.static(__dirname + 'public/css'))

//Connect to DB
mongoose.connect(
    process.env.DB_CONNECT,
() => console.log('connected to db!')
);



//Middleware
app.use(cookieParser());
app.use(express.json());
//Route Middlewares
app.use('/api/user', authRoute);
app.use('/api/posts', postRoute);

app.listen(3000, () => console.log('Server Up and Running'));

任何帮助或建议将不胜感激!

【问题讨论】:

  • 表示req.cookiesundefined

标签: javascript node.js express cookies jwt


【解决方案1】:

我认为您应该在开始使用快速路线之前尝试使用app.use(cookieParser());

【讨论】:

  • 我试过了,没有解决问题。
猜你喜欢
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2020-11-03
  • 2020-05-13
  • 2018-09-29
  • 2020-06-17
相关资源
最近更新 更多