没有客户端javascript的服务器端呈现

没有客户端javascript的服务器端呈现,javascript,reactjs,express,Javascript,Reactjs,Express,我正在尝试创建一个应用程序,它可以通过ajax和传统的表单请求发布数据。我很惊讶在网上找不到关于这个话题的信息。我猜这些天我们都假设我们可以访问客户端JS 我参加了express session,但我对确定实际发生的事情有多困难感到沮丧。据我所知,它在客户端缓存cookie数据,并以某种方式自动将这些数据包含在请求中?那么,如果没有客户端javascript支持,这种格式将无法工作,这是否安全呢 给出这样一种形式: <form method="post" action="/create"&

我正在尝试创建一个应用程序,它可以通过ajax和传统的表单请求发布数据。我很惊讶在网上找不到关于这个话题的信息。我猜这些天我们都假设我们可以访问客户端JS

我参加了express session,但我对确定实际发生的事情有多困难感到沮丧。据我所知,它在客户端缓存cookie数据,并以某种方式自动将这些数据包含在请求中?那么,如果没有客户端javascript支持,这种格式将无法工作,这是否安全呢

给出这样一种形式:

<form method="post" action="/create">
    <input name="value1" onChange={this.handleInput} value={this.state.value1} />
    <button onClick={this.submitForm}
</form>
由使用express会话和passport的auth中间件拾取:

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”请求中,我可以做些什么来发送会话数据

我记得在Rails或PHP等传统Webstack中,某种令牌被呈现到表单中的隐藏字段或呈现时的动作中。如果这样做可行,是否有人知道如何从express会话中获取“重要数据”作为令牌发送?不可能


查看在服务器端呈现中解析的req对象的
req.cookies
req.session
,我看不到任何有用的东西。

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

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

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

您在表单中提到的令牌不是用于身份验证,而是用于跨站点请求伪造,这意味着,由于您提供了令牌(并以某种方式将其存储在服务器端),您将只接受包含所述令牌的登录请求(证明有人导航到您站点的登录页面)以防止其他未登录到您的网站或客户尝试发帖(即:一个刮板


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

我不明白,您是否试图在没有JavaScript的情况下编写应用程序,为什么要使用React?查看开发人员工具中的网络请求,每次请求都应自动向服务器发送cookie。当您通过请求在服务器上进行身份验证时,服务器将返回一个带有
Set Cookie
头的响应,并且该Cookie将附加到随后发送的每个请求,以便服务器知道您是谁。你能更详细地解释一下你的问题吗?我不知道cookie实际上是在HTTP级别保存的,不管javascript如何。这几乎回答了这个问题;抱歉把问题弄糊涂了。是的,看起来cookie确实在请求中被设置了,即使禁用了JS。哎呀。。
router.post('/create', secured(), (req, res) => {