我想通过 Google-API 从 Qt 5.9 C++ 桌面应用程序获取数据。
使用
QOAuth2AuthorizationCodeFlow
我可以登录并访问我需要的任何数据。
现在的问题是我不知道如何存储刷新令牌,这样我就不必在每次启动应用程序时都经历整个身份验证过程。
QOAuth2AuthorizationCodeFlow
似乎没有访问刷新令牌的接口。
我尝试手动请求刷新令牌,但只能收到一条错误消息,表明该请求没有足够的身份验证范围。令牌服务 API 的文档没有提及要添加哪个范围来解决此问题。
如何避免每次启动应用程序时重新进行身份验证(即使仅相隔几秒钟)?
我最终使用一个小型库解决了这个问题。
这个库是开源的,具有非常开放的许可证,易于使用,并且易于添加到 CMake 构建中。
下载源代码,并使用 CMake 构建、编译和安装它们。默认构建选项需要外部库“QKeychain”,但在禁用 CMake 选项中的依赖项时它对我来说效果很好。 然后将 .lib 文件和 include 文件夹添加到项目的 CMakeLists.txt 中。
使用该库只是创建一个特殊的 O2Google 对象用于身份验证和一个 O2Requestor 来向 API 发出经过身份验证的请求。该refresh_token将被自动持久存储,这样每次启动应用程序时都不需要重新验证。
Qt 确实提供了检索刷新令牌的方法:
QAbstractOAuth2::refreshToken() // read refresh token and store somewhere safe
您可以在稍后的会话中使用它
QAbstractOAuth2::setRefreshToken(const QString &refreshToken)
QOAuth2AuthorizationCodeFlow::refreshAccessToken()
成功时将触发授予信号。