#node.js #express #middleware
#node.js #экспресс #промежуточное программное обеспечение
Вопрос:
У меня есть свой маршрут router.post('/invite', adminAuth, async (req, res) => {
, и мне нужно дополнительное промежуточное программное обеспечение для этого маршрута. Пример — adminAuth открывает этот маршрут для администратора и, если активирована подписка администратора. Но если администратор пользователя и подписка отменены, мне все равно нужно иметь возможность открыть для него этот маршрут.
Я пытаюсь так router.post('/invite', [adminAuth, addMiddleware], async (req, res) => {
Но это все еще не работает.
Мое промежуточное программное обеспечение adminAuth выглядит следующим образом
const token = req.headers['x-access-token'] || req.headers.authorization;
if (!token)
return res
.status(401)
.json({ success: false, message: 'Access denied. No token provided.' });
try {
req.user = jwt.verify(token, config.get('secretToken'));
if (
req.user.userType === USER_TYPES.ADMIN amp;amp;
req.user.isStripeSubscriptionActive
) {
next();
} else {
return res.status(401).json({
success: false,
message:
'User is not admin or subscription was canceled! P.S. MIDDLEWARE.',
});
}
} catch (ex) {
return res.status(401).json({
success: false,
message: 'Invalid token P.S. MIDDLEWARE.',
});
}
};
module.exports = {
adminAuth,
};```
Комментарии:
1. Вы пробовали это:
router.post('/invite', adminAuth, addMiddleware, async (req, res) => {
2. @jfriend00 да, все еще работает первое промежуточное программное обеспечение, а второе даже не тронуто 🙁
3. Понимаете ли вы , что второму звонят ТОЛЬКО в том случае , если звонит первый
next()
? Если вы отправляете ответ и не вызываетеnext()
, то запрос выполняется, и промежуточное программное обеспечение больше не вызывается. Итак, я бы посоветовал вам добавитьconsole.log()
вызовы к первому, чтобы вы могли точно отследить, куда ведет его логика, и убедиться, что он вызываетnext()
.4. @jfriend00 итак, сначала проверьте, является ли пользователь администратором и подпиской == true, если не первый ответ промежуточного ПО, а второй даже не затронут, поэтому мне нужно написать одно промежуточное ПО для обоих случаев? если использовать admin и subscription == true, а user admin и subscription == false?
5. Если логике нужны обе части информации для принятия решения, то вы, вероятно, захотите объединить их в одно промежуточное программное обеспечение. Я не понимаю, какую логику вы пытаетесь реализовать, поэтому я не могу дать более конкретную рекомендацию.