【发布时间】:2021-12-09 04:29:16
【问题描述】:
我正在构建一个需要用户登录的后台应用程序。 我有 2 个外部 API:
- API A:管理用户帐户和会话
- API B:对另一个数据库执行 CRUD 操作(与用户数据库无关)
问题是,如果用户的会话无效,我不希望用户能够执行对 API B 的调用。所以我在 Next(pages/api 下)中添加了一些 API 端点,它们执行以下操作:
- 根据 API A 验证会话的有效性
- 如果会话有效:继续步骤3,如果不是:重定向到页面
/login - 调用 API B
如果会话有效,一切正常,但如果会话无效,则一切正常。
我试过了
res.redirect(307, '/login').end()
和
res.writeHead(307, { Location: '/login' }).end()
但它没有用。即使指定整个路径 (http://localhost:3000/login) 也会失败。我不明白的是,如果我直接从浏览器发出请求(GET http://localhost:3000/api/data),我会成功重定向到我的/login 页面。当我在 React 组件中使用 Axios 发出请求时,它不起作用。
知道如何解决这个问题吗?
【问题讨论】:
-
Axios 不会自动跟随 API 返回的重定向。您需要检查收到的响应,并根据返回的内容在客户端进行重定向。
-
简单来说,AJAX 只会中继从服务器传回的信息。您需要手动处理如何处理这些信息。
-
感谢@juliomalves 和 yqlim 的回答!
标签: javascript axios next.js