无法使用QOAuth2AuthorizationCodeFlow实施Google登录

阿里米安人

问题在于重定向URI,我不知道将其设置为什么。长谷任何人都能弄清楚这一点吗?

我在Qt Creator's输出窗格中看到如下错误

qt.networkauth.oauth2: Unexpected call
qt.networkauth.replyhandler: Error transferring https://oauth2.googleapis.com/token - server replied: Bad Request

这是我的代码,一个名为的函数grant()将返回真正的打开成功身份验证。helper类OAuth2Props从Google生成的JSON文件返回所有数据。

bool grant() {
  QOAuth2AuthorizationCodeFlow oauthFlow;
  QObject::connect(&oauthFlow,
                   &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser,
                   &QDesktopServices::openUrl);

  oauthFlow.setScope("email");
  oauthFlow.setAuthorizationUrl(OAuth2Props::authUri());
  oauthFlow.setClientIdentifier(OAuth2Props::clientId());
  oauthFlow.setAccessTokenUrl(OAuth2Props::tokenUri());
  oauthFlow.setClientIdentifierSharedKey(OAuth2Props::clientSecret());
  QOAuthHttpServerReplyHandler oauthReplyHandler(
      QUrl(OAuth2Props::redirectUri()).port());
  oauthFlow.setReplyHandler(&oauthReplyHandler);

  QEventLoop eventLoop;
  QObject::connect(&oauthFlow, &QOAuth2AuthorizationCodeFlow::granted,
                   &eventLoop, &QEventLoop::quit);
  oauthFlow.grant();
  eventLoop.exec();

  return true;
}

对我在做什么错有任何想法吗?我设置为的重定向URI http://127.0.0.1:65535/,我猜这是我做错了吗?

更新:

  1. 以下代码可以正常工作,我遇到麻烦的原因是:获得一次授权后,我又在运行该代码,并且由于已经获得授权,所以我遇到了此错误。

  2. 最好QOAuth2AuthorizationCodeFlow在堆上创建一个实例,就像@Chilarai在他的示例代码中所做的那样。因为我们无论如何都不希望QOAuth2AuthorizationCodeFlow超出范围,因为我们将需要它提出进一步的请求。

  3. 这里的另一个重要说明是连接到QOAuthHttpServerReplyHandler::tokensReceived信号,以便获得与您的Google服务进一步交互所需的令牌。

  4. 令牌可以稍后通过Google REST Api进行测试,如果它仍然有效,这是一种方法,如果您想与之交互,则Google Drive可以尝试一下此答案所建议的内容。

奇拉莱

我很难调试它。但是,我已经意识到,如果您转到Google控制台并将Redirect URI设置为http://127.0.0.1:some_port/而不是http://localhost:some_port/

记住在末尾加'/'

它神奇地工作。在这里休息是我的代码

    this->google = new QOAuth2AuthorizationCodeFlow(this);
        this->google->setScope("email");

        connect(this->google, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, &QDesktopServices::openUrl);

        this->google->setAuthorizationUrl(QUrl("https://accounts.google.com/o/oauth2/auth"));
        this->google->setClientIdentifier(CLIENT_ID);
        this->google->setAccessTokenUrl(QUrl("https://oauth2.googleapis.com/token"));
        this->google->setClientIdentifierSharedKey(CLIENT_SECRET);

// In my case, I have hardcoded 5476 to test
        auto replyHandler = new QOAuthHttpServerReplyHandler(5476, this);
        this->google->setReplyHandler(replyHandler);
        this->google->grant();


        connect(this->google, &QOAuth2AuthorizationCodeFlow::granted, [=](){
            qDebug() << __FUNCTION__ << __LINE__ << "Access Granted!";

            auto reply = this->google->get(QUrl("https://www.googleapis.com/plus/v1/people/me"));
            connect(reply, &QNetworkReply::finished, [reply](){
                qDebug() << "REQUEST FINISHED. Error? " << (reply->error() != QNetworkReply::NoError);
                qDebug() << reply->readAll();
            });
        });

有关其余代码的详细信息,请参阅此如何使用Qt oauth创建登录页面?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Xamarin实施新的Google登录

来自分类Dev

使用Google实施登录,并感到奇怪“不幸的是,MyApp已停止”

来自分类Dev

使用Apple Android实施登录

来自分类Dev

实施密码加密后无法登录

来自分类Dev

实施iOS版Google登录(Swift 2.0)

来自分类Dev

使用Gsuite的Google照片-无法登录

来自分类Dev

使用GTMOAuth2的Asana oAuth-无法使用Google帐户登录

来自分类Dev

实施Oauth2登录,出现致命错误:找不到类“ Google_Service”

来自分类Dev

我如何使用Asp.net Identity实施Facebook和Google登录?

来自分类Dev

使用Google实施登录,然后感到奇怪“不幸的是,MyApp已停止”

来自分类Dev

使用Firebase / GCP实施跨项目用户身份验证(单一登录)(例如Google帐户)

来自分类Dev

无法使用 angular 2 执行登录验证

来自分类Dev

应用程序不会在MainActivity上登录,而是在下一个活动中登录。使用BaseGameUtils实施Google Play服务登录

来自分类Dev

无法集成Google登录?

来自分类Dev

无法在Android项目中实施Google Maps

来自分类Dev

无法在Android项目中实施Google Maps

来自分类Dev

Google登录服务器实施返回401

来自分类Dev

实施Google Play游戏服务-如何让用户登录

来自分类Dev

实施 Google 一键注册和自动登录的指南

来自分类Dev

使用JavaScript无法启动Google+登录流程

来自分类Dev

Laravel Socialite Google登录无法使用个人资料范围

来自分类Dev

无法在Android Studio中使用Google登录身份验证

来自分类Dev

无法使用Android的Asmack库登录到Google Talk

来自分类Dev

Wine emulated Epic Games 商店无法使用 Google 帐户登录

来自分类Dev

EC2-无法使用ec2-user登录

来自分类Dev

Angular2-如何使用Angular2实施Google即时预览?

来自分类Dev

如何使用django在我的网站上实施“使用google登录”。我已经尝试过,但出现错误“ Google不再支持OAuth 1.0”

来自分类Dev

无法使用登录功能

来自分类Dev

无法使用Yii登录

Related 相关文章

  1. 1

    使用Xamarin实施新的Google登录

  2. 2

    使用Google实施登录,并感到奇怪“不幸的是,MyApp已停止”

  3. 3

    使用Apple Android实施登录

  4. 4

    实施密码加密后无法登录

  5. 5

    实施iOS版Google登录(Swift 2.0)

  6. 6

    使用Gsuite的Google照片-无法登录

  7. 7

    使用GTMOAuth2的Asana oAuth-无法使用Google帐户登录

  8. 8

    实施Oauth2登录,出现致命错误:找不到类“ Google_Service”

  9. 9

    我如何使用Asp.net Identity实施Facebook和Google登录?

  10. 10

    使用Google实施登录,然后感到奇怪“不幸的是,MyApp已停止”

  11. 11

    使用Firebase / GCP实施跨项目用户身份验证(单一登录)(例如Google帐户)

  12. 12

    无法使用 angular 2 执行登录验证

  13. 13

    应用程序不会在MainActivity上登录,而是在下一个活动中登录。使用BaseGameUtils实施Google Play服务登录

  14. 14

    无法集成Google登录?

  15. 15

    无法在Android项目中实施Google Maps

  16. 16

    无法在Android项目中实施Google Maps

  17. 17

    Google登录服务器实施返回401

  18. 18

    实施Google Play游戏服务-如何让用户登录

  19. 19

    实施 Google 一键注册和自动登录的指南

  20. 20

    使用JavaScript无法启动Google+登录流程

  21. 21

    Laravel Socialite Google登录无法使用个人资料范围

  22. 22

    无法在Android Studio中使用Google登录身份验证

  23. 23

    无法使用Android的Asmack库登录到Google Talk

  24. 24

    Wine emulated Epic Games 商店无法使用 Google 帐户登录

  25. 25

    EC2-无法使用ec2-user登录

  26. 26

    Angular2-如何使用Angular2实施Google即时预览?

  27. 27

    如何使用django在我的网站上实施“使用google登录”。我已经尝试过,但出现错误“ Google不再支持OAuth 1.0”

  28. 28

    无法使用登录功能

  29. 29

    无法使用Yii登录

热门标签

归档