Qt开源网络库[12]-身份验证

2023-03-17 15:16:49 浏览数 (4)

主要更新内容:添加了身份验证的支持。

  当带有身份验证的请求时,我们需要填写用户名和密码等信息,但QNetworkAccessManager操作略显繁琐,所以特意封装了一下,简化用户操作。并在此基础上添加自动填写用户信息验证次数限制错误处理等功能。

1. 接口:

  1. 自动填写身份验证信息。注:当QNetworkAccessManager的authenticationRequired信号触发时,会自动往QAuthenticator填写用户名和密码信息。
代码语言:javascript复制
HttpRequest &autoAuthenticationRequired(const QAuthenticator &authenticator);
HttpRequest &autoAuthenticationRequired(const QString &user, const QString &password);
  1. 通过回调/槽函数手动填写身份验证信息。
代码语言:javascript复制
inline HttpRequest &onAuthenticationRequired(const QObject *receiver, const char *method);
inline HttpRequest &onAuthenticationRequired(std::function<void (QAuthenticator *)> lambda);
  1. 设置限制身份验证的次数,超过身份验证计数则触发失败并中断请求。

变量

解释

count < 0

不限制验证次数

count = 0

不验证

count = 1

限制验证1次(默认值)

count > 0

限制count次

代码语言:javascript复制
inline HttpRequest &authenticationRequiredCount(int count = 1);
  1. 身份验证失败后错误回调。
代码语言:javascript复制
inline HttpRequest &onAuthenticationRequireFailed(const QObject *receiver, const char *method);
inline HttpRequest &onAuthenticationRequireFailed(std::function<void ()> lambda);
inline HttpRequest &onAuthenticationRequireFailed(std::function<void (QNetworkReply *)> lambda);

2. 例子

  1. 身份验证
代码语言:javascript复制
client.get("https://httpbin.org/basic-auth/admin/123456")
      .onAuthenticationRequired([](QAuthenticator *authenticator) {
            authenticator->setUser("admin");
            authenticator->setPassword("123456");
            qDebug() << "=============";
        })
      .onSuccess([](QString result){qDebug()<<"success: "<<result;})
      .onFailed([](QString err){qDebug()<<"failed: "<<err;})
      .exec();
  1. 身份自动验证
代码语言:javascript复制
client.get("https://httpbin.org/basic-auth/admin/123456")
      .autoAuthenticationRequired("admin", "123456")
      .onSuccess([](QString result){qDebug()<<"success: "<<result;})
      .onFailed([](QString err){qDebug()<<"failed: "<<err;})
      .exec();
  1. 身份验证次数与错误处理
代码语言:javascript复制
client.get("https://httpbin.org/basic-auth/admin/123456")
      .authenticationRequiredCount(2) // 最大重试验证次数为2次(默认值为1次)
      .onAuthenticationRequired([](QAuthenticator *authenticator) {
            authenticator->setUser("admin");
            authenticator->setPassword("1234563"); // 错误输入
        })
      .onAuthenticationRequireFailed([](){ // 验证身份失败的回调
            qDebug() << "authentication failed!";
        })
      .onSuccess([](QString result){qDebug()<<"success: "<<result;})
      .onFailed([](QString err){qDebug()<<"failed: "<<err;})
      .exec();

3. 注意

  • autoAuthenticationRequiredonAuthenticationRequired不能同时使用,因为它们是互斥实现。如不慎同时使用,只会生效autoAuthenticationRequired操作。

4. 代码地址:

https://github.com/aeagean/QtNetworkService

0 人点赞