尝试使用axios的JS库访问superset系统的api,由于存在登陆后才能get的问题,所有的请求都需要先登陆。登陆的逻辑很简单,访问登陆表单的时候服务端会发来一个cookie,当登陆后客户端就会记住这个cookie,服务端通过这个cookie来辨识用户。
默认roadhog有一个代理的功能,可以将访问本地localhost的请求发送到跨域的其他api,由于这个不好用尝试使用了直接使用服务端的地址
问题:
1,Option就是Cors的时候的一个“侦察兵”,浏览器在POST之前先发一个,期待收到
Access-Control-Allow-Origin:
http://10.0.31.116:8088
后续再发出真正的请求,因此直接用axios发出一个post会换成一个option
2,明明发了一个POST,为何发了一个GET
这个问题的关键是axios默认是不带cookie的,而要使用cookie则必须设置
withCredentials: false,
而cookie是在加载登陆表单的时候由Server侧来发出的。因此要获得一个cookie就需要先get。
另外开启这个认证再服务端必须进行两个设置
Access-Control-Allow-Credentials为true
Access-Control-Allow-Origin:是一个具体的IP(不能为*)
研究了一下superset背后的FLASK
ENABLE_CORS = True
CORS_OPTIONS = {'supports_credentials':True}
有这两项设置
../lib/python3.6/site-packages/superset/config.py
另外还需要关掉xsrf的配置,否则会导致登陆不成功
修改后就能登陆成功
问题:从network当中观察,仍然看不到cookie的具体值