【发布时间】:2017-10-14 20:26:26
【问题描述】:
我对此有点陌生。我有用 Node.js 和 Express.js 制作的 REST API。某些路由具有身份验证中间件。要使用这些路由,必须使用经过验证的用户身份验证令牌设置标头。我一直在使用本地存储的静态站点没有问题。我现在正在创建我的第一个动态站点(使用 Express),对于某些路由,我有中间件来加载显示页面所需的所有数据。在没有本地存储帮助的情况下,如何访问和使用身份验证令牌?
编辑(澄清): 所以这是我从数据库(mongoDB)中获取所有事务的 api 路由之一。
app.get('/transactions', authenticate, (req, res) => {
Transaction.find().then((transaction) => {
res.send({transaction});
}, (e) => {
res.status(400).send();
});
});
这是运行的身份验证中间件。
var authenticate = (req, res, next) => {
var token = req.header('x-auth');
User.findByToken(token).then((user) => {
if (!user) {
return Promise.reject();
}
req.user = user;
req.token = token;
next();
}).catch((e) => {
res.status(401).send();
});
};
现在在我的 express 网络服务器上,我有一条以下路线,我使用 getTransactions 来获取我的所有数据。 (我用车把显示)
router.get('/orders', getTransactions, (req, res) => {
res.render('orders.hbs', {
transaction: req.transactions.data.transaction
});
});
这是中间件
var getTransactions = (req, res, next) => {
axios.get('https://serene-wave-28270.herokuapp.com/transactions')
.then((response) => {
req.transactions = response;
console.log(req.transactions.data.transaction);
next();
}).catch((e) => {
console.log(e);
})
}
因此,当我只是在不使用 express 作为网络服务器的情况下创建静态站点时,我只需让用户登录并将身份验证令牌保存在本地存储中。另外,我应该注意前两个块来自我的 api,底部两个来自 webserver,它们都单独托管在 Heroku 上。我不确定这是否是标准设计,所以我想我应该提一下。
【问题讨论】:
标签: node.js rest express authentication