我有一个烧瓶后端和一个反应前端。Flask后端是一个将与其他微服务通信的API。在开发中,我的React前端在localhost:3000上运行,Flask应用程序在localhost:5000上运行。显然,这些端口是不同的,默认情况下会抛出CORS错误。所以我添加了Flask_CORS并允许来自localhost:3000的流量。这很有效,我现在可以为GET和POST请求提供服务。
然后,我将Firebase身份验证添加到前端。我收到一个JWT,然后我想发送JWT和ech API请求,以确保允许用户发出某些请求,这些请求将在Flask后端进行验证。
我在后端的Axios请求中将token_id添加到头中,但现在我收到以下错误:
localhost/:1访问位于'http://localhost:5000/items“起源”http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control Allow Origin'标头。
当我检查网络选项卡时,我注意到如果没有JWT,请求会很好地通过。标题内容见下文:
>
一般:
响应报头:
请求报头:
然后,我只将JWT添加到Axios拦截器的授权标头配置中,现在请求失败,网络选项卡中出现以下标头:
我注意到,当添加授权头时,访问控制允许起源会消失,取而代之的是访问Control_Request头。
前端的相关代码如下所示
import axios from 'axios';
import * as firebase from "firebase/app";
import 'firebase/auth';
const instance = axios.create({
baseURL: 'http://localhost:5000/',
});
instance.interceptors.request.use(config => {
const id_token = firebase.auth().currentUser.getIdToken();
config.headers = { Authorization: id_token}; <---Commenting out this line works
return config
}, error => {
return Promise.reject(error);
})
export default instance;
我不知道如何或为什么一旦添加JWT,CORS就无法工作。我怀疑这是因为一旦JWT被添加,就会有一个飞行前请求。但是我在服务器端没有做任何更改,所以我很困惑,为什么仅仅因为添加了JWT,服务器就不会提供SuiteableLCORS响应。
任何指点都将不胜感激。
您可以在主文件的顶部定义CORS,它将允许所有的CORS请求
from flask import Flask
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app)
@app.route("/api/test")
def test_cors():
return "CORS allowed"
我真的很感激你能提供的任何帮助!
因此,为了简单起见,我只是将添加到MyWebSecurity类的方法中,这解决了选项请求的问题,但因此POST请求不再起作用,而且(同时使用curl)。 我试图找出是否必须以某种方式连接MyWebSecurity类和AuthServer,但没有任何运气。原始示例(开头的链接)也注入了authenticationManager,但这对我没有什么改变。
我想知道JWT令牌最合适的HTTP头类型是什么。 最流行的类型之一可能是。例如: 它处理两个参数,例如登录名和密码。因此,它与JWT令牌无关。 此外,我听说过不记名类型,例如: 然而,我不知道它的意思。它和熊有关吗? 在HTTP头中是否有使用JWT令牌的特殊方法?我们应该使用,还是应该简化并仅使用: 谢谢 编辑: 或者,可能只是一个HTTP头:
如果我从本地前端(也是浏览器)访问本地后端,它会工作:上面的错误不会显示在浏览器控制台中,我会获得数据)。 如果我做了这些选项或接到邮递员的电话到Google Cloud后端,它就有效了。 我注意到,对于Postman,我需要在OPTIONS请求中包含标头,以便将承载令牌发送到Google以使其工作。浏览器不会在选项调用中发送任何标头,即使我将添加到Axios配置中,如下所示: 发送标头中的令牌不
我正在尝试使用JWT身份验证设置一个简单的Angularjs应用程序。 我给新注册的用户发了一封带有jwt令牌链接的邮件,以验证该邮件是否存在。链接如下所示: < code > http://127 . 0 . 0 . 1:3000/verify email/eyj 0 exaioijkv 1 qilchbgcioijiuzi 1 nij 9 . eyj 1c 2 vytmftzsi 6 injp
我正在尝试生成一个带有授权标头的HTTP请求: 但此代码生成的请求不包含授权头: Cache-Control:无缓存 access-control-request-method: 来源:http://localhost:3021 接受语言:en-US,en;q=0.8,he;q=0.6 我做错了什么?