如何使用Qt和访问令牌向GitHub进行身份验证

时间:2020-11-09 10:56:48

标签: qt github

我尝试使用Access Token从我的Qt应用程序实现GitHub身份验证。通过提供URL(在我的情况下为https://api.github.com/notifications)和访问在GitHub上生成的令牌(Postman){{3},我可以使用Settings/Developer settings/Personal access tokens毫无问题地连接到GitHub。 }。现在我想使用Qt来做同样的事情,但是找不到如何做的例子。 Qt文档中有Reddit(https://github.com/settings/tokens)的示例,但是它使用了一些重定向算法,而不是访问令牌:

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"));

我不知道如何使用提供的访问令牌进行相同操作。

1 个答案:

答案 0 :(得分:1)

如果您要使用个人令牌,则无需实现OAuth / OAuth2逻辑,因为事务的第一部分是获取令牌,但OP已经拥有它。如果您有令牌,则只需要请求其余的API:

#include <QByteArray>
#include <QCoreApplication>
#include <QJsonDocument>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QTimer>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    const QString username = "<username>";
    const QString token = "<token>";

    const QByteArray basic_authorization = QByteArray("Basic ") + (username + ":" + token).toUtf8().toBase64();

    QNetworkRequest request;
    request.setRawHeader(QByteArrayLiteral("Authorization"), basic_authorization);
    QUrl url("https://api.github.com/notifications");
    request.setUrl(url);

    QNetworkAccessManager manager;
    QNetworkReply *reply = manager.get(request);
    QObject::connect(reply, &QNetworkReply::finished, [reply](){
        QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
        qDebug() << doc;
        QTimer::singleShot(1000, &QCoreApplication::quit);
    });

    return a.exec();
}