[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] Cancelling QtWebEngine authentication with PyQt
From:       Phil Thompson <phil () riverbankcomputing ! com>
Date:       2016-12-14 15:22:06
Message-ID: 22E35C25-9239-49DB-85DF-5415BBCF590D () riverbankcomputing ! com
[Download RAW message or body]

On 14 Dec 2016, at 11:38 am, Florian Bruhin <me@the-compiler.org> wrote:
> 
> * Phil Thompson <phil@riverbankcomputing.com> [2016-12-14 11:08:15 +0000]:
> > On 6 Dec 2016, at 6:06 am, Florian Bruhin <me@the-compiler.org> wrote:
> > > 
> > > Hi,
> > > 
> > > QtWebEngine requires setting the passed QAuthentication pointer to an
> > > empty QAuthenticator to cancel authentication
> > > ("*authenticator = QAuthenticator();" in authenticationRequired), see
> > > the note here:
> > > 
> > > http://doc-snapshots.qt.io/qt5-5.7/qtwebenginewidgets-qtwebkitportingguide.html#qt-webengine-does-not-interact-with-qnetworkaccessmanager
> > >  
> > > Unfortunately I can't see a way to do this from PyQt, apart from
> > > using setHtml to display some error (which seems a bit hacky to me):
> > > 
> > > https://github.com/kovidgoyal/vise/commit/749a9c693e4107c073a90042b079dc658ad73564
> > >  
> > > Not sure what the best way to solve this would be though...
> > 
> > Sorry, I'm not understanding. What is it you want to do in Python that you can't?
> 
> QtWebEngine calls authenticationRequired with a pointer to a non-null
> QAuthenticator.
> 
> To cancel the authentication, the passed pointer needs to be set to a
> new null QAuthenticator:
> 
> // slot connected to QWebEnginePage::authenticationRequired
> void Foo::handleAuthenticationRequired(const QUrl &url, QAuthenticator \
> *authenticator) {
> *authenticator = QAuthenticator();
> }
> 
> Since PyQt's signature is also "QUrl, QAuthenticator" (i.e. my code
> gets a QAuthenticator as argument, it doesn't return any) there's no
> way for it to return None or a new null QAuthenticator.
> 
> Solutions I can think of (unless I'm missing something):
> 
> - Having something like:
> sip.writepointer(authenticator, QAuthenticator())

I've called it assign() as it invokes the assignment operator.

The following code works...

import sip
from PyQt5.QtNetwork import QAuthenticator

a = QAuthenticator()
assert a.isNull()

a.setUser("foo")
assert not a.isNull()

sip.assign(a, QAuthenticator())
assert a.isNull()

It is in current hg and tonight's snapshot.

Phil
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic