我在 React Native 中发送了以下请求:
const getData = async (cookie) => {
const resp = await fetch('/some_info');
const data = await resp.json();
console.log(data)
}
如您所见,我故意没有添加适当的标题:
headers: {
'X-CSRF-TOKEN':value,
}
在请求中,因为我想验证没有它 GET 请求会失败。
以下是我的配置:
JWT_ACCESS_TOKEN_EXPIRY_MINS = 15
JWT_REFRESH_TOKEN_EXPIRY_MINS = 1000
JWT_TOKEN_LOCATION = ['cookies']
JWT_COOKIE_CSRF_PROTECT = True
JWT_COOKIE_SECURE = False # change to True in prod
在我的浏览器中,我可以看到以下相关 cookie:
端点定义如下:
@app.route('/some_info', methods=['GET'])
@jwt_required
def get_some_info():
user_identity = get_jwt_identity()
name = get_user_name_from_identity()
age = get_user_age_from_identity()
return jsonify({
'name': name,
'age': age
})
当请求发生时,在控制台日志中,我得到一个200
并且能够看到 json 数据。在请求标头(使用 Chrome 检查器)中,我看到X-CSRF-TOKEN
从未设置。为什么会发生这种情况/为什么请求会通过?
来自 JWT 扩展文档:
# By default, the CRSF cookies will be called csrf_access_token and
# csrf_refresh_token, and in protected endpoints we will look for the
# CSRF token in the 'X-CSRF-TOKEN' header. You can modify all of these
# with various app.config options. Check the options page for details.