【发布时间】:2017-11-23 07:44:14
【问题描述】:
在回答实际问题之前
好的,我已经创建了自己的身份验证系统,将在我的 API 上使用。
简单解释:
在/signup 上,用户输入用户名、密码等... API 授予用户tokens,这些tokens 存储在数据库的用户文档中。 API 还返回带有新的refreshToken 和accessToken 的响应正文,我的想法是,应用程序可以轻松地将令牌存储在手机上,以便以后调用 API。
/login 几乎是一样的,只是你只提供用户名和密码。
API 中的一个路由是/article,您可以使用GET 和POST。
现在,如果您尝试使用 GET /article 并且您的 accessToken 已过期,API 将自动调用 /token 这需要在标头中添加 refreshToken,然后 /token 将授予您一个新的accessToken,并在标头中使用新的accessToken 请求您尝试获取的相同路由(在本例中为/article)。
问题:
用new accessToken 更新应用中的accessToken 的最佳方式是什么?
router
.route('/article')
.get(
AuthenticateController.authenticate,
NewsController.getAllArticles,
AuthenticateController.sendAuthorize
);
这就是我现在的做法,AuthenticateController.authenticate 验证 accessToken 并检查它是否已过期,然后调用next()。
NewsController.getAllArticles 获取所有文章并调用next(),因此AuthenticateController.sendAuthorize 可以运行并在授予新文章时在响应标头中返回新的accessToken(我认为这会更容易在应用程序中获取新令牌)。这就是我的问题所在,因为我不能在每条路由上调用next(),因为在某些路由上,主函数已经返回响应,这意味着不能调用next(),这意味着AuthenticateController.sendAuthorize 永远不会运行。我希望 AuthenticateController.authenticate 成为对用户进行身份验证所需的唯一中间件。
【问题讨论】:
标签: javascript node.js mongodb react-native jwt