【发布时间】: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.cookies是undefined
标签: javascript node.js express cookies jwt