我会说我已经在做这项工作,但是在上周的某个地方,它变得一团糟,我似乎无法追踪到做到这一点的提交。
我正在使用Node and Express创建微服务,其中一些代码可能不值一提(笑)。我的想法是,我有一个自定义API网关,该网关使用Request将请求转发到我的后端服务。为此,我使用函数设置了选项,然后使用options
重设了req.user
的一部分,以便可以访问其他后端服务中的用户信息。
用于请求的选项
options = {
baseUrl : serviceURL, // Ignore this part it is because I am using multiple instances of my backend services.
form: {'':''}, // This is where I am going to pass in the user info below
headers: {authorization: ''}
}
路线/终点
// POST USER/SETTINGS/NOTIFICATION
router.post('/user/settings/notification',
isAuthenticated('all'), (req, res) => { // This line authenticates and authorizes the user. It also attaches the user model/data to req.user
options.form = req.body;
options.form.user = req.user; // Here I set the user data to be accessible
request.post(req.path, options, (error, response, body) => {
if (error) throw error;
res.status(response.statusCode).send(body);
});
});
输出
{
foo: 'bar', // This is my other data
'user[company][stripe][isCoupon]': 'false',
'user[isVerified]': 'true',
'user[_id]': '5c8d2a0c2f1f881e2377a601',
'user[email]': 'jdoe@example.com',
'user[password]': '',
'user[companyID]': 'd6633033-7791-479b-8287-66b5d41ef798',
'user[updatedAt]': '2019-03-16T17:51:05.245Z',
'user[createdAt]': '2019-03-16T16:53:32.018Z',
'user[__v]': '0' }
我遇到的问题是,我试图通过一条路由访问req.body.user.email
,并且当我console.log记录发布请求的req.body
时,会得到上面的输出。
编辑
这是将数据分配给req.user
的原因,如果我此时执行console.log
,它将显示一个普通的JSON对象,从理论上讲,它可以使用点符号。
request.get('/authorize', options, (error, response, body) => {
if (error) { return res.status(500).send('Error')}
if (body == 'Unauthorized') return res.status(400).json({success: false, message: 'Looks like your session has expired. Please log back in to continue.'});
let result = JSON.parse(body);
if(result.user.role == role || role == 'all') {
req.user = result.user;
next();
} else {
return res.status(403).send("You don't have permissions to access this page.");
}
});
编辑2
router.get('/authorize',
sessions.authorize,
(req, res) => {
let user = req.user;
user.password = '';
res.json({success: true, user});
});
sessions.authorize
返回护照jwt用户