我正在尝试创建一个可以通过ajax和传统形式的请求发布数据的应用程序。我对在网上找不到有关该主题的信息感到惊讶。我想这些天我们都假设我们可以访问客户端JS?
我参加了快速会议,但是对于确定实际发生的事情有多么困难,我感到沮丧。据我了解,它是在客户端上缓存cookie数据,并以某种方式自动将其包含在请求中?那么可以安全地假设没有客户端JavaScript支持,这种格式将无法工作吗?
给出如下形式:
^
(?:
# 1.00 - 1.99
1
\.
(?:
0 \d
| [1-9] \d
)
|
# 2.00 - 10.00
(?:
[2-9]
| 10
)
\.00
)
$
我通过ajax发送的请求将通过auth(由于具有会话数据):
<form method="post" action="/create">
<input name="value1" onChange={this.handleInput} value={this.state.value1} />
<button onClick={this.submitForm}
</form>
被使用快速会话和通行证的身份验证中间件所提取:
event.preventDefault();
postUrl(`/create`, {value1: this.state.value1})
.then(jsonRes => {
// works
});
可保护用于创建的非常简单的api路由:
module.exports.secured = (loginUrl = "/employers") => {
return (req, res, next) => {
if ( (req.isAuthenticated()) ) { return next(); }
req.session.returnTo = req.originalUrl;
res.redirect(loginUrl);
return next();
};
};
我的想法是,即使启用了JS,我也可以在此路由上处理请求,但是问题在于身份验证。
我该怎么做才能在这些“非js”请求中发送会话数据?
我记得在Rails或PHP之类的传统Web堆栈中,某些令牌在隐藏字段中或在渲染操作中被渲染到表单中。如果这行得通,有谁知道如何获取“重要数据”,以便从快速会话中说出并作为令牌发送?不可能吗?
查看在服务器端渲染中解析的req对象的router.post('/create', secured(), (req, res) => {
或req.cookies
,我看不到有什么用处。
答案 0 :(得分:1)
我该怎么做才能在这些“非js”请求中发送会话数据?
通常,对您登录名的响应将发送一个Set-Cookie
标头,以指示客户端应存储所述cookie,这意味着它将被用来识别自己的身份
谁存储cookie?它不是JavaScript而是浏览器,因此,如果您使用curl
或抓取工具,则客户必须获取返回的Cookie并将其包含在后续请求中
您在表单中提到的令牌不是用于身份验证,而是用于跨站点请求伪造,这意味着由于您提供了令牌(并以某种方式存储在服务器端),因此您只会接受登录请求,其中包含所述令牌(证明有人导航到您网站的登录页面),以防止其他 didnt 进入您的登录尝试发布信息的网站或客户端(例如:抓取工具)
此外,会话不一定意味着身份验证,现代框架倾向于发出会话,无论是否通过身份验证