【发布时间】:2021-07-01 06:15:28
【问题描述】:
让我澄清一下我的用例:
我有一个 next.js 应用程序,它是一个用于列出房地产对象的平台。我有几个我在 next.js 应用程序中使用的 api 路由。例如:
/api/createpost ->
从我的 next.js 应用程序的表单中获取信息并创建一个数据库条目以执行新帖子
/api/getposts ->
从我的数据库中获取所有房地产帖子并显示它
/api/login ->
通过检查数据库中的凭据登录用户并发送 jwt
/api/register ->
通过从我的 next.js 应用程序的表单中获取凭据、注册用户并在我的数据库中创建条目来注册用户
现在,为了保护我的 api,我想确保检查是否存在有效的用户会话,如果有人调用其中一个 api(注册/登录 api 除外)以获得预期结果。我通过调用/api/login 路由并获得有效的用户会话来做到这一点。直到这里一切正常。像 /api/createpost 这样的 API 只有在我们有一个有效的用户会话时才能被调用。
现在我想创建一个移动应用程序,并且我想使用上面的 api 路由来在我的移动应用程序中提供完整的功能。例如,如果我想在我的移动应用程序上调用/api/createpost,它应该工作相同,我需要一个有效的用户会话。
但是我想通过在我的数据库中请求一个指向我的应用程序的密钥来限制我的 api,如果你调用 /api/createpost api 就说好的,首先我需要验证它是移动应用程序在询问。然后,移动应用将在请求中提供密钥。
我还没有尝试过,但我认为它应该可以工作。 现在大混乱:如果我们调用 /api/createpost 并且 api 想要一个有效的令牌来检查数据库,这将适用于移动应用程序,因为我们给它一个有效的令牌来检查在数据库中,如果我们从 next.js 应用程序内部调用 api,我们如何提供令牌?由于我必须在客户端进行 api 调用,因此我无法提供密钥或其他东西来验证调用是否来自我的 next.js 应用程序。
【问题讨论】:
-
我不会将此作为答案,因为我没有足够的时间编写代码示例。我要做的是 1. 找到像 JWT 这样的身份验证方法,2. 使用中间件;当您使用 JWT 时,您可以向用户提供访问令牌,无论是在网站还是移动应用程序中,2. 您可以创建一个中间件函数来解码令牌,获取其数据,检查用户是否真的存在,(所有你想检查的)等。如果一切正常,你可以访问路由,否则你会返回一个未经授权的错误。
-
如果这是您要找的,请告诉我。如果是这样,我可以添加更详细的解释作为答案。
标签: next.js