我试图了解refresh_token()函数在Wyze python SDK中的工作原理: https://github.com/shauntarves/wyze-sdk/blob/master/wyze_sdk/api/client.py
假设我想访问 Wyze API 以列出我拥有的所有设备。
首先,我的 python 脚本检查我是否在上次登录的文件中存储了 access_token。这将无需再次登录。
如果我存储了一个,那么我只需使用从文件中读取的访问令牌来调用 API:
wyze_access_token = read_access_token_file()
client = Client(token=wyze_access_token)
response = client.devices_list()
如果我没有存储,我使用 Client.login() 登录,然后存储它响应的 access_token 和 refresh_token:
response = Client().login(
email="...",
password="...",
key_id="...",
api_key="..."
)
write_access_token_file(response["access_token"])
write_refresh_token_file(response["refresh_token"])
在这种情况下,我已经存储了上次登录时存储的 access_token。 但是已经过期了。所以现在我需要使用refresh_token()函数。
我尝试调用 client.refresh_token() 但收到错误消息,提示客户端未登录:
wyze_sdk.errors.WyzeClientConfigurationError:客户端未登录
它这样说是因为它检查是否有一个refresh_token分配给Client对象
..嗯,我没有将其分配给客户端,我将其存储在文件中。只有在执行 Client.login() 后才会分配刷新令牌...
但我不想登录。这需要大量时间,而使用令牌要快得多。
为什么refresh_token()不接受参数以便我可以传递我存储在文件中的refresh_token?我不明白,为什么要重新登录,这完全违背了使用令牌的目的?
我实际上如何处理最初从存储在文件中的登录()响应中获得的refresh_token?
refresh_token
的来源,它需要来自 self._refresh_token
的刷新令牌。所以你可以这样做,
refresh_token = read_refresh_token_file()
client = Client(refresh_token=refresh_token)
client.refresh_token()
client.devices_list()