【发布时间】:2019-01-15 16:46:02
【问题描述】:
我已经用一个拦截器设置了我的前端,如果存在JWT token,它总是添加一个Authorization 标头。
我有 2 个 API,一个用于检查授权,另一个用于处理任何其他数据请求(这是我正在处理的一个)。
我想在我的数据 API 中实现以下目标:
创建某种守卫(?),我可以将其放置在某些 api 路由周围,以检查是否存在 Authorization 标头。然后它需要调用不同的 API 来检查令牌是否有效。如果失败,则返回错误,否则继续执行所需的请求。
我是 node 新手,我不知道正确和最有效的方法。我没有足够的知识,所以我尝试用谷歌搜索它,但没有结果。
我并不是要你们为我写这篇文章,我只是在寻找关于如何做到这一点的想法,所以我可以更深入地研究它,因为现在我不知道该寻找什么或者如果这是可能的。
感谢您的帮助!
编辑:这是我目前处理请求的方式
路线
/**
* Add survey for a participant
*
* URL: /participant/survey
* METHOD: POST
*/
router.post('/participant/survey', function(req, res) {
var bodyValidation = iValidator.json_schema(
schema.addSurvey,
req.body,
'survey'
);
if (bodyValidation.valid == false) {
return res.status(422).send(bodyValidation.errorMessage);
}
participantService
.addSurvey(req.body)
.then(data => {
res.status(200).send({ success: true, survey: data });
})
.catch(err => {
res.status(422).send(err);
});
});
服务
function addSurvey(survey) {
return new Promise((resolve, reject) => {
participantModel
.addSurvey(survey)
.then(data => {
survey.id = data.insertId;
resolve(survey);
})
.catch(err => {
reject(err);
});
});
}
型号
function addSurvey(survey) {
return new Promise((resolve, reject) => {
db.query(
'INSERT INTO ...',
(error, result) => {
if (error) {
dbFunc.connectionRelease;
reject(error);
} else {
dbFunc.connectionRelease;
resolve(result);
}
}
);
});
}
【问题讨论】:
-
嗨!请通读help center,尤其是How do I ask a good question? 如果您向我们展示您需要执行的请求之一的minimal reproducible example,这将使人们更容易为您提供帮助很多这个,以及授权检查代码的示例。
-
@T.J.Crowder 感谢您解释如何改进我的问题。我添加了一些代码以使其更清晰
-
授权码是什么样的?
-
旁注:该服务显示
Promiseconstructor anti-pattern。你不需要,也不需要new Promise;你已经有一个来自addSurvey的承诺。只需返回链接的结果:pastebin.com/c2UmdNh5 -
我们不需要查看内部结构,我们需要知道您如何调用它来获得授权。但无论如何,您已有的两个答案应该足以让您弄清楚这一点。
标签: javascript node.js api express jwt