node.js - React + Express 与 Passport.js
问题描述
我正在使用 React 和 Express JS 设置一个全栈应用程序。
我正在使用 Passport.js 进行身份验证,但遇到了一个小问题......
所以我的前端和后端是两个独立的包,在两个不同的端口上运行。在我的快递应用程序上,我创建了如下所示的路线。
app.post('/api/account/login', (req, res, next) => {
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/users/login',
}) (req, res, next);
});
就 Passport.js 而言,这是相当标准的。基本上,如果它验证了我提供的凭据,那么它应该将我重定向到 /dashboard。如果没有,那么到其他提到的路线。
我可以从我的反应应用程序调用到达此端点,并在 chrome 的网络选项卡中获得如下正确响应。
Request URL: http://localhost:3000/dashboard
Request Method: GET
Status Code: 304 Not Modified
Remote Address: 127.0.0.1:3000
Referrer Policy: no-referrer-when-downgrade
但是,它实际上并没有将我重定向到 /dashboard。难道不能这样做吗?
谢谢。
解决方案
听起来您的 React 应用程序正在通过 ajax 使用类似fetch
.
您使用 Passport 的方式假定浏览器直接发出请求。成功登录后,Passport 会返回一个重定向响应(HTTP 302 或类似),浏览器会接受该响应并将用户重定向到该响应。
Ajax 请求不能以这种方式工作,因为没有发生任何导航。
你需要在 React 方面自己处理这个问题。您的 Express 应用程序需要通过(例如)返回带有令牌的 JSON 消息或存储会话 cookie 来处理会话身份验证。您需要更新您的 React 应用程序以识别这一点,然后通过客户端 Javascript 导航到正确的路线。
如果您正在使用react-router
,他们有一些示例代码可能会有所帮助。
推荐阅读
- php - Fetch_All 和 Fetch_assoc 不能使用准备好的语句
- wpf - 如何在 WPF 功能区中添加按钮而不移动所有下一个控件?
- r - 当 y 轴反转时,防止 x 轴标签移动到绘图顶部
- python - python代码输出是一次但放入函数和输出重复本身
- python - Pandas 减法行为存在精度问题(即使在转换之后)
- google-sheets - 条件格式规则中的自定义公式有时会出错
- machine-learning - NN 只是不擅长解决这个简单的线性问题,还是因为训练不好?
- assembly - 如何在 MASM x86 中连接字符串?
- javascript - 无法在三个地方读取 null 的属性“样式”
- sql-server - 定期将 SQL Server 传输到 Azure SQL