gpt4 book ai didi

javascript - 没有客户端 JavaScript 的服务器端渲染

转载 作者:行者123 更新时间:2023-12-03 00:18:05 24 4
gpt4 key购买 nike

我正在尝试创建一个可以通过 ajax 和传统表单请求发布数据的应用程序。我对在网上找到的有关该主题的信息的缺乏感到惊讶。我想现在我们都假设我们可以访问客户端 JS?

我选择了快速 session ,但我对确定实际发生的情况有多么困难感到沮丧。据我所知,它在客户端缓存 cookie 数据,并以某种方式自动将这些数据包含在请求中?那么可以肯定地说,如果没有客户端 JavaScript 支持,这种格式将无法工作吗?

给定这样的形式:

<form method="post" action="/create">
<input name="value1" onChange={this.handleInput} value={this.state.value1} />
<button onClick={this.submitForm}
</form>

我通过ajax发送的请求将通过身份验证(由于有 session 数据):

event.preventDefault();
postUrl(`/create`, {value1: this.state.value1})
.then(jsonRes => {
// works
});

被使用快速 session 和护照的身份验证中间件拾取:

module.exports.secured = (loginUrl = "/employers") => {
return (req, res, next) => {
if ( (req.isAuthenticated()) ) { return next(); }
req.session.returnTo = req.originalUrl;
res.redirect(loginUrl);
return next();
};
};

它保护一个非常简单的 api 路由来创建:

router.post('/create', secured(), (req, res) => {

我的想法是,即使启用了 JS,我也可以在该路由上处理请求,但问题在于身份验证。

如何才能在这些“非 js”请求中发送 session 数据?

我记得在 Rails 或 PHP 等传统 Webstack 中,某种 token 会在隐藏字段或渲染操作中渲染到表单中。如果这可行,有谁知道如何获取“重要数据”,可以说是在快速 session 中作为 token 发送的?不可能吗?

查看在服务器端渲染中解析的 req 对象的 req.cookiesreq.session ,我没有看到任何对此有用的内容。

最佳答案

如何才能在这些“非 js”请求中发送 session 数据?

通常,对您的登录的响应会发送一个 Set-Cookie header ,以向客户端指示它应该存储所述 cookie,这意味着它将用于识别自己的身份

谁存储cookie?它不是 javascript,而是浏览器,因此如果您使用 curlscraper ,您的客户端将必须获取返回的 cookie 并将其包含在后续请求中

您在表单中提到的 token 不是用于身份验证,而是用于跨站点请求伪造,这意味着由于您提供了 token (并以某种方式存储在服务器端),您只会接受登录请求包括所述 token (证明有人导航到您网站的登录页面),以防止其他没有访问您的登录页面尝试发布帖子(即:抓取工具 )

此外, session 并不一定意味着身份验证,现代框架倾向于发出 session ,无论是否经过身份验证

关于javascript - 没有客户端 JavaScript 的服务器端渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54452316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com