python - Flask-sentinel /oauth/token 端点 CORS 问题
问题描述
我在尝试使用前端从我的烧瓶哨兵应用程序获取令牌时遇到问题。
为了从我的前端向我的Python Eve API 服务器发出 AJAX 请求,我使用了superagent模块。
在使用基本身份验证时,我从端点获取数据没有任何问题。请参见下面的代码:
superagent
.get( 'http://192.168.1.x:5000/endpoint' )
.auth( this.params.username, this.params.password )
.on( 'error', this.onError )
.then( this.onSuccess );
如果我尝试使用以下代码向/oauth/token
端点请求令牌:
superagent
.post( 'http://192.168.1.x:5000/oauth/token' )
.set( 'Content-Type', 'application/x-www-form-urlencoded' )
.send( 'grant_type=password&client_id='+this.params.client_id+'&username='+this.params.username+'&password='+this.params.password )
.on( 'error', this.onError )
.then( this.onTokenReceived );
我收到一个 CORS 错误:
Access to XMLHttpRequest at 'http://192.168.1.x:5000/oauth/token' from origin 'http://192.168.1.y:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
这是我的应用程序的设置(省略数据库和域设置):
SENTINEL_X_DOMAINS = ['http://192.168.1.y:3000']
SENTINEL_X_HEADERS = ['Authorization','Content-type','If-Match','Access-Control-Allow-Origin']
SENTINEL_X_EXPOSE_HEADERS = SENTINEL_X_HEADERS
SENTINEL_RESOURCE_METHODS = ['GET','HEAD','PUT','PATCH','POST','DELETE','OPTIONS']
SENTINEL_PUBLIC_METHODS = SENTINEL_RESOURCE_METHODS
SENTINEL_X_ALLOW_CREDENTIALS = True
X_DOMAINS = ['http://192.168.1.y:3000']
X_ALLOW_CREDENTIALS = True
X_HEADERS = ['Authorization','Content-type','If-Match','Access-Control-Allow-Origin']
RESOURCE_METHODS = ['GET','HEAD','PUT','PATCH','POST','DELETE','OPTIONS']
你能指导我了解我做错了什么吗?
先感谢您!
解决方案
可能因为内容类型不是 text/plain,浏览器正在发出OPTIONS请求。并且如控制台错误中所述,响应未设置“ Access-Control-Allow-Origin ”标头。
通过查看Eve 的文档,您似乎需要使用 ['Access-Control-Allow-Origin'] 设置 X_EXPOSE_HEADERS 变量:
“允许 API 维护人员指定在 CORS 响应中公开哪些标头。允许的值为:无或标头名称列表。默认为无。”
浏览器期望收到“Access-Control-Allow-Origin”,因此失败。尝试在 API 的响应中允许此标头
推荐阅读
- javascript - 我们如何从外部作用域的箭头函数内部获取值?
- pandas - 根据给定的上下文检索单词例如,给定一个职位描述,我需要找到与技能相关的单词
- xsl-fo - 如何指示一个 fo:block 跨越一个页面
- spring-data-jpa - 批量读取数据
- node.js - react nodejs项目中的多个package.json文件
- php - 是否有关于如何在 PHP 或 .htaccess 中隐藏文件名的可能解决方案?
- python - 给定用户名和密码,无法调用 github API
- ios - “无法打开文件‘command.cgi’。”
- python - 如果相应(相同索引点)列 B 的条件成立,则将函数应用于列 A
- css - 如何更改bs4中悬停的宽度