[Development] [API Change] New authentication method in QNetworkAccessManager

Kurt Pattyn pattyn.kurt at gmail.com
Sun Mar 9 15:10:02 CET 2014


Currently, QNAM stalls when authentication is required (also see: https://bugreports.qt-project.org/browse/QTBUG-16251).
Also, the connection between the authenticationRequired signal and the slot must be a direct connection.
This is problematic when an application wants to show a login dialogbox for instance.

I propose to change this implementation by using a delegate authenticator instead.

class QAuthenticator
{
…
protected Q_SLOTS:
    
    //this method should be called asynchronously from QNAM
    void authenticate(QNetworkReply *reply) {
        if (doAuthenticate(reply))
            Q_EMIT authenticated();
        else
            Q_EMIT authenticationFailed();
    }
...

protected:
    //return false if the request should be stopped (authentication denied)
    //return true if authentication should continue
    virtual bool doAuthenticate(QNetworkReply *reply) = 0;
...
}

//example use
class MyAuthenticator: public QAuthenticator
{
    bool doAuthenticate(QNetworkReply *reply) {
        setUser();
        setPassword();
        setOption();
        
        //whatever is required

        return true;
    }
}

The QNetworkRequest class would be extended with a setAuthenticator() method, as follows:

class QNetworkRequest
{
...
    void setAuthenticator(QAuthenticator *authenticator);
...
}

Usage:
MyAuthenticator *auth = new MyAuthenticator;
networkRequest.setAuthenticator(auth);

Another option is to add the setAuthenticator() method to the QNAM class.

When this would be implemented, the authenticationRequired() signal would become obsolete.


What are your opinions on this?


Note: QWebSocketServer uses the same blocking signal for CORS authentication
(this was merely done to be inline with the QNAM way of working).

Cheers,

Kurt

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20140309/e48d8b48/attachment.html>


More information about the Development mailing list