【发布时间】:2022-02-06 15:24:41
【问题描述】:
我目前在弄清楚如何访问 req.user 时遇到问题,以便我可以获取已登录的用户 ID 并将其与他们保存在网页上的项目一起保存。这样,当他们加载网页时,他们只会得到他们的项目。我知道我可以访问 req.user 的唯一地方是我的 /router/auth.js 文件。我想找出一种在不同的路由器文件中访问它的方法。
router/auth.js
const express = require('express');
const passport = require('passport');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const config = require('../config');
const router = express.Router();
const createAuthToken = function (user) {
return jwt.sign({ user }, config.JWT_SECRET, {
subject: user.username,
expiresIn: config.JWT_EXPIRY,
algorithm: 'HS256'
});
};
const localAuth = passport.authenticate('local', { session: false });
router.use(bodyParser.json());
router.post('/login', localAuth, (req, res) => {
const authToken = createAuthToken(req.user.serialize());
res.json({ authToken });
});
const jwtAuth = passport.authenticate('jwt', { session: false });
router.post('/refresh', jwtAuth, (req, res) => {
const authToken = createAuthToken(req.user);
res.json({ authToken });
});
/router/portfolio.js
router.post('/:id', (req, res) => {
const id = req.params.id;
const { holdings } = req.body;
CryptoPortfolio.findOne({ id }, (err, existingCoin) => {
if (existingCoin === null) {
getCoins(id)
.then(x => x[0])
.then(value =>
CryptoPortfolio.create({
id: value.id,
holdings,
_creator: this is where I want to add req.user.id
}).then(() => value))
.then(newItem => {
res.status(201).json(newItem);
})
.catch(err => {
console.error(err);
res.status(500).json({ message: 'Internal server error' });
});
} else {
const capitalizedId = id.charAt(0).toUpperCase() + id.slice(1);
res.json(`${capitalizedId} already in watchlist`);
}
});
});
【问题讨论】:
-
我认为您可以使用“护照库”进行用户身份验证,默认情况下它会在所有文件中为您提供 req.user 数据。
-
您可以在您的portfolio.js 文件的路径中访问“req.user”。尝试做 console.log(req.user);你也可以分享你的护照配置文件。
-
@FarhanTahir 我确实尝试过 console.log(req.user),但它给了我未定义的信息。如果我链接 repo 可能会更容易,因为我不确定护照配置文件是什么意思 - github.com/jinesh701/bittrack-server - 与我的问题唯一相关的文件夹是 auth、portfolio 和 server.js
标签: javascript node.js express