Angular提交表单至Flask应用时遭遇CORS策略错误求助
解决Flask + Angular注册表单提交的CORS错误
嘿,我一眼就发现问题所在了!你代码里的CORS配置根本没生效,核心原因是:你先初始化了一个Flask实例并配置了CORS,但紧接着又用create_app(config_name)重新赋值了app变量——等于之前的CORS配置全白做了,实际运行的是create_app返回的那个未配置CORS的app实例!
修正方案
把CORS配置移到获取create_app返回的app之后,这样配置才会作用在实际运行的应用上。修正后的代码如下:
import os, sys from flask import Flask import pathlib from flask_cors import CORS from flask_restplus import Api, Resource, fields from werkzeug.middleware.proxy_fix import ProxyFix import coloredlogs, logging as log coloredlogs.install() from main.apis.user import api as User from main.apis.auth import api as Auth from main import create_app from flask_pymongo import PyMongo authorizations = { 'token': { 'type': 'apiKey', 'in': 'header', 'name': 'Authorization' } } config_name = os.getenv('FLASK_CONFIG') # 先拿到真正要运行的app实例 app = create_app(config_name) # 现在给这个app配置CORS CORS(app, origins="http://localhost:4200", allow_headers=[ "Content-Type", "Authorization", "Access-Control-Allow-Credentials","Access-Control-Allow-Origin"], supports_credentials=True, intercept_exceptions=False) api = Api(app, authorizations=authorizations, version='1.0', title='API docs', description='A simple REST API with JWT authentication.', doc='/docs' ) app.config['jwt']._set_error_handler_callbacks(api) app.config['ROOT_DIR'] = pathlib.Path(__file__).parent.absolute() # Endpoints api.add_namespace(Auth, path='/v1') api.add_namespace(User, path='/v1') # Run Server if __name__ == '__main__': app.run()
额外调试建议
如果修正后还是有问题,可以试试这些步骤排查:
- 先简化CORS配置测试:用
CORS(app, origins="http://localhost:4200"),排除复杂头配置的干扰,确认基础跨域可用后再逐步添加其他配置 - 检查
create_app函数内部,有没有重置app的配置或者覆盖了CORS相关设置 - 确认Angular端的请求是否携带了自定义头(比如Authorization),这类请求会触发OPTIONS预请求,flask_cors默认会自动处理OPTIONS请求,但如果有自定义的路由拦截器,要确保OPTIONS请求能正常返回
内容的提问来源于stack exchange,提问作者rf guy
相关产品推荐
相关产品推荐

