【问题标题】:Session field is None会话字段为无
【发布时间】:2021-01-06 00:17:12
【问题描述】:

我在一个域中托管了一个用 Flask 编写的 REST API,并在 azure app services 中的另一个域中托管了我的 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,我可以毫无问题地使用端点。我注意到的一件事是我的请求和响应会话值字符串不同。下面是请求响应标头的屏幕截图。

有什么想法吗?

【问题讨论】:

  • 目前写的问题中没有任何内容表明与 CORS 相关的任何问题。如果存在 CORS 问题,浏览器将在 devtools 控制台中记录一条特别提到 CORS 的错误消息。
  • @sideshowbarker 我只是想确保我为跨域通信设置了正确的 CORS 策略。还提供一些想法以查看请求和响应标头中的不同会话字符串。目前,由于我已经探索了我能想到的所有可能性,所以我陷入了困境。
  • 如果你没有正确设置跨域通信的 CORS 策略,你会知道浏览器会在 devtools 控制台中报告错误。因此,如果浏览器没有报告任何此类错误,那么您就知道您已正确设置了 CORS 策略。

标签: reactjs azure-devops react-router flask-cors


【解决方案1】:

玩了很多天后,我发现我需要将credentials: 'include' 添加到我的获取请求中,以便浏览器发送带有跨域请求的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>"],

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 2021-11-18
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多