【问题标题】:Authentication between React frontend and Node backendReact 前端和 Node 后端之间的身份验证
【发布时间】:2018-02-25 05:54:32
【问题描述】:

我认为我在将会话从我的 Node 后端传递到我的 React 前端时遇到了问题,但我有点不知道我不知道什么情况。有人可以帮忙吗?

问题来了:

我在后端有这条路线..

app.get('/account', ensureAuthenticated, function(req, res){
res.status(200).json({ user: req.user });
});

在成功的 Steam Passport 身份验证后输出用户数据 JSON。当我检查 EJS 视图生成的帐户页面时,我可以验证这是否有效。

在 React 服务器上,我有一个带有 Steam 身份验证链接的根页面。它成功进入 Steam,然后重定向回根页面。

当我尝试从根 React 页面对“/account”进行 JSON 提取时,响应不再是 JSON,而是来自后端“/account”模板的 HTML,但我当然需要 JSON。

我认为它没有将我识别为已通过身份验证,因为在使用 Chrome 的高级 REST 客户端扩展程序执行 GET 请求时,我得到了相同的 HTML 响应。 我还应该注意,我正在通过 Create React App 的代理功能代理 API 服务器。

更新:问题已解决。

fetch('https://example.com:1234/users', { credentials: 'include' })

【问题讨论】:

    标签: json node.js reactjs express passport.js


    【解决方案1】:

    听起来问题可能是由于app.get 调用的顺序,或者您的节点服务器的配置——可能是 EJS 模板。

    我会寻找你在哪里做类似app.set('view engine', 'ejs'); 的事情以及你在哪里做app.get('/account'...

    你会想要在 app.get('/account'.. 之前做 你做 app.set('view engine...

    如果您真的点击了/account 路由,您应该得到401 或JSON 响应,而不是HTML (EJS)。

    【讨论】:

    • 原来req.isAuthenticated() 在这个函数内部返回 false 我在路由上调用:function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/'); } 响应是从这个函数路由到 root 的 HTML。如果我告诉 ensureAuthenticated 只返回 next(),它至少会在测试路线上吐出一些 JSON。不知道从这里去哪里。
    猜你喜欢
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2019-01-09
    • 2019-12-04
    • 2021-02-06
    • 2021-08-21
    相关资源
    最近更新 更多