Firebase Authentication: 'HTTPResponse' object has no attribute 'strict', status: error

回答 4 浏览 5235 2023-05-04

我有点困惑,为什么这段代码突然失败,而它在一个星期里一直运行得很好。

import firebase_admin
from firebase_admin import firestore, credentials,db, auth

    def userIsLoggedIn(self,id_token: str) -> bool:
        try:
            decoded_token = auth.verify_id_token(id_token)
            self.uid = decoded_token['uid']
        except Exception as e:
            return False,str(e)       
        
        return True,""

返回的错误信息是:'HTTPResponse' object has no attribute 'strict',而且我只能在我的云服务器上测试时复制这个错误,而不是在localhost上。

我查看了堆栈跟踪,我发现是auth.verify_id_token函数导致的问题,具体来说就是:

ile "/usr/local/lib/python3.11/site-packages/cachecontrol/serialize.py", line 54, in dumps
2023-05-04T16:11:04.767062340Z u"strict": response.strict,
2023-05-04T16:11:04.767067540Z ^^^^^^^^^^^^^^^
2023-05-04T16:11:04.767072540Z AttributeError: 'HTTPResponse' object has no attribute 'strict'

编辑:

好的,所以下面的Patrick给我指出了一个链接,告诉我:

"这似乎是 cachecontrol 与新发布的 urllib3 2.0 不兼容。目前,你可能需要使用旧版本的 urllib3,或者与 cachecontrol 团队合作,更新其用法;

我得看看我现在是否能对此做些什么。例如,按照Patrick的建议,使用urllib3 2.0.0作为一种变通方法。

Reddspark 提问于2023-05-04
4 个回答
#1楼 已采纳
得票数 15

看来你是碰到了这个毛病了:

https://github.com/ionrock/cachecontrol/issues/292

到目前为止,还没有公布任何修复方法。

根据https://urllib3.readthedocs.io/en/stable/changelog.html#deprecated更新日志,使用1.26.15 "固定"对我来说是这样。[编辑:说要尝试使用urllib3 2.0.0作为解决方法,但这并不奏效。]

Patrick Mansfield 提问于2023-05-04
Patrick Mansfield 修改于2023-05-04
我增加了更多的细节和一个解决方法。我正在尝试使用这个解决方法:我使用的是以python:3.9-slim-bullseye开始的docker镜像,到目前为止还没有找到使用urllib3 2.0.0的好方法。Patrick Mansfield 2023-05-04
哦,天哪。谢谢 @PatrickMansfield - 我一直在剖析我的代码,试图找出造成这种情况的原因。至少现在我知道这不是我的问题。我将编辑我的问题,为人们提供更多的信息,从我看到的链接中。Reddspark 2023-05-04
这是由Firebase-admin -> requests -> urllib3在我的案例中造成的。问题是,requests需要任何版本的urllib。我的解决方法是在requirements-file中添加一个urllib3<2.0.0Blip 2023-05-05
#2楼
得票数 9

我在运行poetry install时遇到了同样的错误,可能是由于同样的根本原因。这对OP没有帮助,但为了防止其他人因为同样的原因找到这个帖子,我通过从诗歌1.1.14升级到1.3.2来解决这个问题。

bsauce 提问于2023-05-04
bsauce 修改于2023-05-05
语境:github.com/python-poetry/poetry/issues/7877tzachs 2023-05-04
谢谢--设置urllib3对我有用,但我最终也使用了这个变通办法,因为我在使用poetry,已经为它设置了一个版本,更新它是个好主意,而且这意味着少了一个版本的设置。奇怪的是,我看了一下,poetry在版本上改为使用urllib3,以获得一个较新的版本(他们本来可能应该使用>=某个版本),但这也意味着它不会使用比1.26.0更新的版本。相当于版本问题。Patrick Mansfield 2023-05-06
它像一个魅力的工作!谢谢Alex 2023-05-14
#3楼
得票数 2

我在为一个Django项目建立docker镜像时遇到了同样的问题。我只是把我安装的poetry版本从1.1.8改为1.4.2,问题就消失了。

chidimo 提问于2023-05-06
#4楼
得票数 0

我尝试了不同的变化,但对我有帮助的是将poetry的版本从1.1.13改为1.3.2,还将poetry.lock中的urllib3版本改为">=1.26.1, <2.0.0"。

Nikita 提问于2023-05-10