reactjs - React 和 React Router DOM - NavLink 和 Link 不会触发基于 API 的 OAuth 流
问题描述
到目前为止,我正在构建一个非常简单的应用程序,它使用带有基本 API 和 React 前端的 Node/Express 服务器。
在 Node/Express 中,我使用 Passport,因此用户可以使用 100% 工作的 Google 登录。但是,仅在使用<a>
标签时。
如果我使用<NavLink>
或<Link>
地址栏显示更新后的 URL /auth/google
,但它不会触发流程。
在这种情况下,react-router-dom 库中是否有一些陷阱?
节点/快递:authRoutes.js
const passport = require("passport");
module.exports = app => {
app.get(
"/auth/google",
passport.authenticate("google", {
scope: ["profile", "email"]
})
);
app.get(
"/auth/google/callback",
passport.authenticate("google"),
(req, res) => {
res.redirect("/surveys");
}
);
app.get("/api/logout", (req, res) => {
req.logout();
res.send(req.user);
});
app.get("/api/current_user", (req, res) => {
res.send(req.user);
});
};
反应客户端:setupProxy.js
const proxy = require("http-proxy-middleware");
module.exports = function(app) {
app.use(proxy(["/api", "/auth/google"], { target: "http://localhost:5000" }));
};
<NavLink>
并且<Link>
不适用于用户直接访问的以下任何路由:“/auth/google”、“/api/current_user”或“/api/logout”。但是当我使用它们时,<a>
它们都工作得很好。
解决方案
如果您向我们展示反应部分和后端会更好。react-router-dom 并不意味着发送任何 GET 请求,因此您可能应该通过 fetch 或 axios 等来处理它......使用一个简单的onClick
功能。
<Link to="/anywhere" onClick={() => axios.get("http://localhost:5000/auth/google")}>Google Login</Link>
推荐阅读
- c++ - 使用从 B 继承的具体函数实现从 A 继承的虚函数
- c++ - 在 C 或 C++ 中从 X11 合成 WM 请求图像
- javascript - 通过函数确定负责函数调用的元素 ID。没有jQuery
- javascript - 为一个元素指定多个最大宽度值
- python-3.x - 如何为本地文件设置 X-Frame-Options
- python - 配置 Tkinter 消息以在单独的行上显示元组
- r - 如何在连接之前识别两个数据帧之间的不匹配 ID?
- javascript - 将 Fetch 与 Google Places API 结合使用
- wordpress - 请求 /jwt-auth/v1/token 说“用户名字段为空”
- c# - Dotnet Core API - 获取控制器方法的 URL