通过 nodejs 在超集中导入仪表板时出现 CSRF 问题 API
CSRF issue while importing dashboard in superset through nodejs API
我在尝试通过 NodeJS POST API 调用导入仪表板(启用 VERSIONED_EXPORT
)时遇到 flask_wtf.csrf:The CSRF session token is missing.
。下面是适用于我所有其他超集 API 调用的相同设置:
const config = {
headers: {
'X-CSRFToken': await this.getCsrfToken(),
'Authorization': `Bearer ${await this.getAccessToken()}`
}
}
axios.get<T>(url, config) //or
axios.post<T>(url, data, config)
对于导入仪表板 API 调用,我正在使用 form-data
,如果我将仪表板导入添加到 WTF_CSRF_EXEMPT_LIST
,它会起作用,但我想避免这样做,但它不能'不适用于我尝试过的所有这些方法:
const formData = new FormData()
// With X-CSRFToken (shown above)
formData.append('formData', fs.createReadStream(filePath))
// With X-CSRFToken & defined file name & length
var stat = fs.statSync(filePath);
formData.append('formData', fs.createReadStream(filePath), {filename: fileName, knownLength: stat.size})
// With X-CSRFToken and/or Referral and/or Content-Type and/or Content-Length
var stat = fs.statSync(filePath);
formData.append('formData', fs.createReadStream(filePath), {filename: fileName, knownLength: stat.size})
const contentLength = formData.getLengthSync()
const config = {
headers: {
'X-CSRFToken': await this.getCsrfToken(),
'Authorization': `Bearer ${await this.getAccessToken()}`
'Referrer': url,
'Content-Type': 'multipart/form-data',
'Content-Length': contentLength
}
}
// With X-XSRF-TOKEN
const config = {
headers: {
'X-XSRF-TOKEN': await this.getCsrfToken(),
'Authorization': `Bearer ${await this.getAccessToken()}`
}
}
formData.append('formData', fs.createReadStream(filePath))
await post(url, formData, config)
我怀疑这可能是由 form-data
引起的,它无法处理 csrf 令牌 headers,因为我可以在 Postman 上导入仪表板:
Headers: {
Authorization: 'Bearer {token}',
X-CSRFToken: {csrfToken}
}
form-data: {
formData: {uploadedFile}
}
我乐于接受有关如何在不使用 form-data
节点
的情况下导入仪表板的建议
这是 csrf
令牌的常见问题。
见相关 post.
在超集情况下,您不仅需要获得 csrf
令牌,还需要获得 session cookie。 Session cookie 看起来像这样
session=eyJjc3JmX3Rva2VuIjoiMGYwMzRiNzgyMzIyMDgwNTM5M2Y4YzdjODYyZmIzZGMyMGJlYjAwZiJ9.Ykb6sQ.PSJYvZBxYK7nEMzK3smE4WUSVEY;
您需要将此 session 信息添加到您客户端的 Cookie
header 中,它将起作用。
我在尝试通过 NodeJS POST API 调用导入仪表板(启用 VERSIONED_EXPORT
)时遇到 flask_wtf.csrf:The CSRF session token is missing.
。下面是适用于我所有其他超集 API 调用的相同设置:
const config = {
headers: {
'X-CSRFToken': await this.getCsrfToken(),
'Authorization': `Bearer ${await this.getAccessToken()}`
}
}
axios.get<T>(url, config) //or
axios.post<T>(url, data, config)
对于导入仪表板 API 调用,我正在使用 form-data
,如果我将仪表板导入添加到 WTF_CSRF_EXEMPT_LIST
,它会起作用,但我想避免这样做,但它不能'不适用于我尝试过的所有这些方法:
const formData = new FormData()
// With X-CSRFToken (shown above)
formData.append('formData', fs.createReadStream(filePath))
// With X-CSRFToken & defined file name & length
var stat = fs.statSync(filePath);
formData.append('formData', fs.createReadStream(filePath), {filename: fileName, knownLength: stat.size})
// With X-CSRFToken and/or Referral and/or Content-Type and/or Content-Length
var stat = fs.statSync(filePath);
formData.append('formData', fs.createReadStream(filePath), {filename: fileName, knownLength: stat.size})
const contentLength = formData.getLengthSync()
const config = {
headers: {
'X-CSRFToken': await this.getCsrfToken(),
'Authorization': `Bearer ${await this.getAccessToken()}`
'Referrer': url,
'Content-Type': 'multipart/form-data',
'Content-Length': contentLength
}
}
// With X-XSRF-TOKEN
const config = {
headers: {
'X-XSRF-TOKEN': await this.getCsrfToken(),
'Authorization': `Bearer ${await this.getAccessToken()}`
}
}
formData.append('formData', fs.createReadStream(filePath))
await post(url, formData, config)
我怀疑这可能是由 form-data
引起的,它无法处理 csrf 令牌 headers,因为我可以在 Postman 上导入仪表板:
Headers: {
Authorization: 'Bearer {token}',
X-CSRFToken: {csrfToken}
}
form-data: {
formData: {uploadedFile}
}
我乐于接受有关如何在不使用 form-data
节点
这是 csrf
令牌的常见问题。
见相关 post.
在超集情况下,您不仅需要获得 csrf
令牌,还需要获得 session cookie。 Session cookie 看起来像这样
session=eyJjc3JmX3Rva2VuIjoiMGYwMzRiNzgyMzIyMDgwNTM5M2Y4YzdjODYyZmIzZGMyMGJlYjAwZiJ9.Ykb6sQ.PSJYvZBxYK7nEMzK3smE4WUSVEY;
您需要将此 session 信息添加到您客户端的 Cookie
header 中,它将起作用。