导入仪表板时出现问题:响应显示登录页面

Problem importing a dashboard: The response shows a login page

当我使用 Superset 的 API 导入仪表板时,响应显示登录页面。

我正在使用 Python 执行请求。

import requests

headers = {
    'accept': 'application/json', 
    'Authorization': f'Bearer {jwt_token}', 
    'X-CSRFToken': csrf_token,
    'Referer': url
}
files = { 
    'formData': (
        dashboard_path, 
        open(dashboard_path, 'rb'), 
        'application/json'
    )
}

response = requests.get(url, files=files, headers=headers)

有谁知道如何解决这个问题?

我自己在使用 Superset API 时遇到了一些问题,主要是因为我没有正确处理 CSRF 令牌:

JWT 令牌的检索、CSRF 令牌和实际请求发生在同一会话中似乎很重要。

如果我不那样做,我可以重现你的错误并且也被发送到登录页面(你在这个例子中也使用了 GET 请求,但它应该是 POST)。

这是我本地测试设置的示例:


import requests

session = requests.session()

jwt_token = session.post(
    url='http://localhost:8088/api/v1/security/login',
    json={
    "username": "admin",
    "password": "admin",
    "refresh": False,
    "provider": "db"
    }
).json()["access_token"]

csrf_token = session.get(
    url='http://localhost:8088/api/v1/security/csrf_token/',
    headers={
        'Authorization': f'Bearer {jwt_token}',
    }
).json()["result"]

headers = {
    'accept': 'application/json',
    'Authorization': f'Bearer {jwt_token}',
    'X-CSRFToken': csrf_token,
}

response = requests.post(
    'http://localhost:8088/api/v1/dashboard/import',
    headers=headers,
    files={
        "formData": ('dashboards.json', open("dashboards.json", "rb"), 'application/json')
    },
)

session.close()