Flask会话变量不会将一次调用的值保持为另一个

时间:2017-08-11 18:14:10

标签: python session flask

我一直试图让它工作一段时间,我不知道该尝试什么。我制作了一个Flask应用程序,我现在正在localhost上测试它。我在localhost:8000上为我的客户端运行服务器,在localhost:8080上为Flask应用程序运行另一个服务器,然后我使用flask-cors来启用跨域请求。一切似乎工作正常,应用程序完成其工作。但是,当它在session中存储值时,它突然失败了。这是代码的关键部分:

def retrieve_tokens(self, session, code):
    # Get tokens from ORCID given a request code
    headers = {'Accept': 'application/json'}
    payload = dict(self._details)
    payload.update({
        'grant_type': 'authorization_code',
        'code': code,
    })

    try:
        r = post(self._url + 'oauth/token',
                 data=payload, headers=headers)
    except ConnectionError:
        return None

    # Save them (if no error has occurred)
    rjson = r.json()
    if 'error' not in rjson:
        print rjson
        session['login_details'] = rjson
        print session['login_details']

    return r.json()

def get_tokens(self, session, code=None):
    # Retrieve existing tokens, or ask for new ones
    if 'login_details' in session and code is None:
        print session['login_details']
        return session['login_details']
    elif code is not None:
        # Retrieve them
        return self.retrieve_tokens(session, code)
    else:
        # Something went wrong
        return None

如您所见,那里有一些print调试调用。调用retrieve_tokens时一切都很顺利;最重要的是,第二个print给出与第一个相同的结果(即具有所有请求的标记的JSON对象)。但是get_tokens顽固地返回None。我有什么可能做错的任何线索?我排除了一些事情:

  • 我的app_secret已设置好,应该没问题。我使用一个静态的,从JSON文件加载(这样我就可以把它放到我的存储库的.gitignore中)
  • 设置SERVER_NAME无效
  • 在主文件中导入session并将其传递给这些函数(在另一个文件中)而不是直接在外部文件中导入它不会改变任何内容
  • 更改值后使用session.modified = True不会改变任何内容

我可以尝试什么?似乎没什么用。在localhost上运行是一个问题吗?一个bug?我在Ubuntu 16.04上使用Chrome,如果有帮助的话。

1 个答案:

答案 0 :(得分:0)

问题是您要在if语句中分配一个值。因此,如果未给出if语句的条件,则不会分配将在以后使用的值,并且代码将因此失败。尝试通过if-else语句更改if-statement,以确保会话的该字段具有值。