为什么在浏览器中看不到我从 Flask 发送到 Flutter 的 cookie?
Why can't I see a cookie I sent from Flask to Flutter in the browser?
我正在创建一个需要登录验证的 Flutter Web 应用程序。用户使用身份验证信息发出 post 请求,然后我的 Flask 应用将 cookie 发送回客户端。
这是 Flask 应用程序的代码
@app.route('/test', methods=['POST'])
@cross_origin(supports_credentials=True)
def test():
resp = jsonify({'message' : 'Logged in!'})
resp.set_cookie('Set-Cookie', "token", httponly = True, secure = False)
return resp
这是 Dart/Flutter 代码,我在其中发出 POST 请求并期待一个名为 'Set-Cookie'.
的 cookie
class HttpService {
static var dio = Dio();
static testMethod() async {
try {
dio.options.extra['withCredentials'] = true;
var response = await dio.post('http://127.0.0.1:5000/test');
print(response);
} catch (e) {
print(e);
}
}
如您所见,我的浏览器没有收到此 cookie,但请求成功并且收到了 JSON 消息!
但是,当我在 Postman 上发出同样的请求时,我得到了 JSON 响应和 cookie。
如有任何帮助,我们将不胜感激!如果您还需要,请告诉我 details/code.
感谢Kris,我意识到我正在从 Flutter(客户端)向 IP 而不是域名 localhost 发出请求。因为设置 cookie 是特定于域的,所以我在开发者控制台中看不到设置的 cookie。
这是更新后的代码
static testMethod() async {
try {
dio.options.extra['withCredentials'] = true;
var response = await dio.post('http://localhost:5000/test');
print(response);
} catch (e) {
print(e);
}
}
我正在创建一个需要登录验证的 Flutter Web 应用程序。用户使用身份验证信息发出 post 请求,然后我的 Flask 应用将 cookie 发送回客户端。
这是 Flask 应用程序的代码
@app.route('/test', methods=['POST'])
@cross_origin(supports_credentials=True)
def test():
resp = jsonify({'message' : 'Logged in!'})
resp.set_cookie('Set-Cookie', "token", httponly = True, secure = False)
return resp
这是 Dart/Flutter 代码,我在其中发出 POST 请求并期待一个名为 'Set-Cookie'.
的 cookieclass HttpService {
static var dio = Dio();
static testMethod() async {
try {
dio.options.extra['withCredentials'] = true;
var response = await dio.post('http://127.0.0.1:5000/test');
print(response);
} catch (e) {
print(e);
}
}
如您所见,我的浏览器没有收到此 cookie,但请求成功并且收到了 JSON 消息!
但是,当我在 Postman 上发出同样的请求时,我得到了 JSON 响应和 cookie。
如有任何帮助,我们将不胜感激!如果您还需要,请告诉我 details/code.
感谢Kris,我意识到我正在从 Flutter(客户端)向 IP 而不是域名 localhost 发出请求。因为设置 cookie 是特定于域的,所以我在开发者控制台中看不到设置的 cookie。
这是更新后的代码
static testMethod() async {
try {
dio.options.extra['withCredentials'] = true;
var response = await dio.post('http://localhost:5000/test');
print(response);
} catch (e) {
print(e);
}
}