QT中没有重定向URL的OAuth工作流

QT中没有重定向URL的OAuth工作流,qt,oauth,Qt,Oauth,我有一个QT桌面应用程序。我想使用内置的QT功能实现OAuth工作流。我运行了QT提供的redditclient示例。这要求我们提供一个重定向URL,该URL在示例中如下所示: 有没有办法在不显示此重定向URL的情况下获取授权代码?因为我有一个桌面应用程序,所以不确定在我的情况下重定向URL会是什么?有必要使用浏览器或类似的方法来验证和接受应用程序的权限。如果您不想使用浏览器,则可以使用QWebEngineView,为了展示一个示例,我将使用Qt的官方示例: 因此,请对其进行修改,以便不使用Q

我有一个QT桌面应用程序。我想使用内置的QT功能实现OAuth工作流。我运行了QT提供的redditclient示例。这要求我们提供一个重定向URL,该URL在示例中如下所示:


有没有办法在不显示此重定向URL的情况下获取授权代码?因为我有一个桌面应用程序,所以不确定在我的情况下重定向URL会是什么?

有必要使用浏览器或类似的方法来验证和接受应用程序的权限。如果您不想使用浏览器,则可以使用QWebEngineView,为了展示一个示例,我将使用Qt的官方示例:

因此,请对其进行修改,以便不使用QDesktopServices::openUrl(),而是使用QWebEngineView:

redditwrapper.h

/。。。
私人:
QOAuth2AuthorizationCodeFlow oauth2;
bool永久=假;
QWebEngineView浏览器;
};
redditwrapper.cpp

// ...
RedditWrapper::RedditWrapper(QObject *parent) : QObject(parent)
{
    auto replyHandler = new QOAuthHttpServerReplyHandler(1337, this);
    oauth2.setReplyHandler(replyHandler);
    oauth2.setAuthorizationUrl(QUrl("https://www.reddit.com/api/v1/authorize"));
    oauth2.setAccessTokenUrl(QUrl("https://www.reddit.com/api/v1/access_token"));
    oauth2.setScope("identity read");

    connect(&oauth2, &QOAuth2AuthorizationCodeFlow::statusChanged, [=](
            QAbstractOAuth::Status status) {
        if (status == QAbstractOAuth::Status::Granted)
            emit authenticated();
    });
    oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage stage, QVariantMap *parameters) {
        if (stage == QAbstractOAuth::Stage::RequestingAuthorization && isPermanent())
            parameters->insert("duration", "permanent");
    });

    connect(&oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, [this](const QUrl & url){
        browser.resize(640, 480);
        browser.load(url);
        browser.show();
    });
    connect(&browser, &QWebEngineView::urlChanged, [replyHandler, this](const QUrl & url){
        if(url.adjusted(QUrl::RemoveQuery) == QUrl(replyHandler->callback())){
            qDebug() << url;
            browser.close();
        }
    });
}
// ...
/。。。
RedditWrapper::RedditWrapper(QObject*parent):QObject(parent)
{
auto replyHandler=新的QOAuthHttpServerReplyHandler(1337,this);
oauth2.setReplyHandler(replyHandler);
oauth2.setAuthorizationUrl(QUrl(“https://www.reddit.com/api/v1/authorize"));
oauth2.setAccessTokenUrl(QUrl(“https://www.reddit.com/api/v1/access_token"));
oauth2.设置范围(“标识读取”);
connect(&oauth2,&QOAuth2AuthorizationCodeFlow::statusChanged,[=](
QAbstractOAuth::Status(状态){
if(status==QAbstractOAuth::status::grated)
发出已验证的();
});
oauth2.setModifyParametersFunction([&](QAbstractOAuth::Stage Stage,QVariantMap*参数){
if(stage==QAbstractOAuth::stage::RequestingAuthorization&&isPermanent())
参数->插入(“持续时间”、“永久”);
});
connect(&oauth2,&QOAuth2AuthorizationCodeFlow::AuthorizationWithBrowser,[this](const-QUrl&url){
浏览器。调整大小(640480);
浏览器加载(url);
browser.show();
});
connect(&browser,&QWebEngineView::urlChanged,[replyHandler,this](const-QUrl&url){
if(url.adjusted(QUrl::RemoveQuery)==QUrl(replyHandler->callback()){

qDebug()您想使用OAuth访问什么服务?我这样做是为了向您展示一个实际示例我想使用我的工具访问我们公司的文档中心。如果您能在redditclient示例中向我展示如何执行此操作,它将非常有用。