Session 字段是 None
Session field is None
我在一个域中托管了一个用 Flask 编写的 rest API,在 Azure 应用程序服务的另一个域中托管了我的 React 应用程序。我可以使用用户名和密码成功登录系统。但是,当我尝试访问端点时,我得到 None
用户名属性(本地一切正常,没有任何问题)。
def login_required( f ):
@wraps(f)
def wrap( *args, **kwargs ):
project_owner = session.get( 'username' )
if project_owner is None:
logging.error( ERROR_MSG.LOGIN_ERROR_MSG )
return response.cannot_process_redirect( ERROR_MSG.LOGIN_ERROR_MSG, '/' )
else:
return f( *args, **kwargs )
return wrap
我想我已经应用了正确的 CORS 策略,但我无法让它工作。应用的CORS配置如下。
app.config['CORS_HEADERS'] = 'Content-Type'
app.config['SESSION_COOKIE_HTTPONLY'] = False
CORS( app, supports_credentials = True, resources = {r"/api/*": {"origins": "http://domainA.net"}} )
端点的提取请求如下所示。
export function getUsers() {
const url = 'users/'
const requestOptions = {
method: 'GET',
credentials: 'include'
};
return ( dispatch ) => {
return fetchReq( requestOptions, url ).then( ([response, json]) => {
// Do something
} )
}
}
同样在 Azure 应用服务中,domainA
被添加到 domainB
中允许的来源列表。
如果我使用 Postman,我可以毫无问题地使用端点。我注意到的一件事是在我的请求和响应中 session 值字符串不同。下面是request-responseheaders.
的截图
有什么想法吗?
玩了很多天后,我发现我需要将 credentials: 'include'
添加到我的获取请求中,以便浏览器将发送带有 cross-origin 请求的 cookie (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials) .所以我在 Flask 应用程序中的最终 CORS 配置如下。
app.config['SESSION_COOKIE_SECURE'] = True
app.config['SESSION_COOKIE_HTTPONLY'] = True
app.config['SESSION_COOKIE_SAMESITE'] = 'None'
CORS( app, resources = {r"/api/*": {"origins": ["http://localhost:3000", "<Domains that are allowed to do cross origin requests>"],
我在一个域中托管了一个用 Flask 编写的 rest API,在 Azure 应用程序服务的另一个域中托管了我的 React 应用程序。我可以使用用户名和密码成功登录系统。但是,当我尝试访问端点时,我得到 None
用户名属性(本地一切正常,没有任何问题)。
def login_required( f ):
@wraps(f)
def wrap( *args, **kwargs ):
project_owner = session.get( 'username' )
if project_owner is None:
logging.error( ERROR_MSG.LOGIN_ERROR_MSG )
return response.cannot_process_redirect( ERROR_MSG.LOGIN_ERROR_MSG, '/' )
else:
return f( *args, **kwargs )
return wrap
我想我已经应用了正确的 CORS 策略,但我无法让它工作。应用的CORS配置如下。
app.config['CORS_HEADERS'] = 'Content-Type'
app.config['SESSION_COOKIE_HTTPONLY'] = False
CORS( app, supports_credentials = True, resources = {r"/api/*": {"origins": "http://domainA.net"}} )
端点的提取请求如下所示。
export function getUsers() {
const url = 'users/'
const requestOptions = {
method: 'GET',
credentials: 'include'
};
return ( dispatch ) => {
return fetchReq( requestOptions, url ).then( ([response, json]) => {
// Do something
} )
}
}
同样在 Azure 应用服务中,domainA
被添加到 domainB
中允许的来源列表。
如果我使用 Postman,我可以毫无问题地使用端点。我注意到的一件事是在我的请求和响应中 session 值字符串不同。下面是request-responseheaders.
的截图有什么想法吗?
玩了很多天后,我发现我需要将 credentials: 'include'
添加到我的获取请求中,以便浏览器将发送带有 cross-origin 请求的 cookie (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials) .所以我在 Flask 应用程序中的最终 CORS 配置如下。
app.config['SESSION_COOKIE_SECURE'] = True
app.config['SESSION_COOKIE_HTTPONLY'] = True
app.config['SESSION_COOKIE_SAMESITE'] = 'None'
CORS( app, resources = {r"/api/*": {"origins": ["http://localhost:3000", "<Domains that are allowed to do cross origin requests>"],