gpt4 book ai didi

javascript - 使用新的 accessToken 更新应用程序中的 accessToken 的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:40 25 4
gpt4 key购买 nike

在讨论实际问题之前

好吧,我已经创建了自己的身份验证系统,并将在我的 API 上使用它。

简单解释:
/signup用户输入用户名、密码等... API 授予用户 tokens它们存储在数据库中的用户文档中。 API 还会返回一个响应正文,其中包含新的 refreshTokenaccessToken ,我的想法是让应用程序可以轻松地将 token 存储在手机上,以便以后调用 API。

/login除了您只提供用户名和密码之外,几乎是相同的事情。

API 中的路由之一是 /article你可以GET & POST .

现在,如果您尝试例如 GET /article和你的accessToken过期API会自动调用/token这需要 refreshToken在 header 中,/token然后将授予您一个新的 accessToken并使用新的 /article 请求您尝试获取的相同路线(在本例中 accessToken )在标题中。

问题:更新 accessToken 的最佳方式是什么?在应用程序中使用 accessToken

router
.route('/article')
.get(
AuthenticateController.authenticate,
NewsController.getAllArticles,
AuthenticateController.sendAuthorize
);

这就是我现在的做法,AuthenticateController.authenticate验证 accessToken 并检查它是否过期,然后调用 next() .

NewsController.getAllArticles获取所有文章,还调用next()所以AuthenticateController.sendAuthorize可以运行并返回新的 accessToken当授予新 token 时,在响应 header 中(我认为这将使在应用程序中获得新 token 变得更容易)。这就是我的问题所在,因为我无法调用 next()在每条路线上,因为在某些路线上,主函数已经返回响应,这意味着 next()无法调用,这意味着 AuthenticateController.sendAuthorize永远不会跑。我想要AuthenticateController.authenticate成为验证用户身份所需的唯一中间件。

最佳答案

您不应等到最后一个路由发送新 token ,而是应将 sendAuthorize 中间件移至路由的主响应上方(或将其与 authenticate 组合),并使用新 token 发送 401 Unauthorized 响应。然后,更新客户端上的 token 并重新发送请求。

无论如何,使用无效的 accessToken 发送有效响应似乎是一种愚蠢的做法。您最终希望使 token 失效(即注销或更改密码时),并且您不希望用户能够发出未经身份验证的请求。

关于javascript - 使用新的 accessToken 更新应用程序中的 accessToken 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com