2017-02-10 2 views
1

Ich verwende Twisted-Klein als Server. Hier ist ein einfaches Beispiel:HTTP Basic Auth auf Twisted-Klein-Server

from klein import Klein 


app = Klein() 


@app.route('/health', methods=['GET']) 
def health_check(request): 
    return '' 


@app.route('/query/<path:expression>', methods=['GET']) 
def query(request, expression): 
    return 'Expression: {0}'.format(expression) 


if __name__ == '__main__': 
    app.run(host='0.0.0.0', port=8000) 

Wie kann ich HTTP Basic Auth query API Endpunkt? Mit Flask ist das einfach: http://flask.pocoo.org/snippets/8/

Aber ich finde keine Beispiele, wie Sie dies auf Twisted-Klein-Server tun.

Antwort

2

Twisted selbst hat support for HTTP basic (and digest) authentication, faktorisiert als eine Ressource Wrapper, die auf jede andere Ressource angewendet werden kann.

Ihr kleines Beispiel zeigt es nicht, aber klein kann (muss, wirklich) create a resource from your app um Twisted's Webserver zu benutzen.

Sie können sie so etwas wie kombinieren:

import attr 
from zope.interface import implementer 
from twisted.cred.portal import IRealm 
from twisted.internet.defer import succeed 
from twisted.cred.portal import Portal 
from twisted.web.resource import IResource 
from twisted.web.guard import HTTPAuthSessionWrapper, BasicCredentialFactory 
from klein import Klein 

app = Klein() 
# ... define your klein app 

@implementer(IRealm) 
@attr.s 
class TrivialRealm(object): 
    resource = attr.ib() 

    def requestAvatar(self, avatarId, mind, *interfaces): 
     # You could have some more complicated logic here, but ... 
     return succeed((IResource, self.resource, lambda: None)) 

def resource(): 
    realm = TrivialRealm(resource=app.resource()) 
    portal = Portal(realm, [<some credentials checkers>]) 
    credentialFactory = BasicCredentialFactory(b"http auth realm") 
    return HTTPAuthSessionWrapper(portal, [credentialFactory]) 

du the klein docs for using twistd web nach ausgeführt werden können.

+0

Danke! Ich werde versuchen, dies morgen umzusetzen. –

+0

Wenn ich versuche, den Server mit "twistd" auszuführen, erhalte ich den folgenden Fehler: 'kein Modul namens 'Anwendung'. Muss ich 'setup.py' Datei erstellen, und wie? Vielleicht ist es besser, wenn ich eine weitere SO Frage dazu aufstelle. –

+0

Welche verdrehte Befehlszeile hast du benutzt? Ein Fehler bezüglich der Art der Anwendung klingt so, als ob Sie versuchen würden, die WSGI-Funktion zu verwenden, aber die kleinen Dokumente, die ich verlinkt habe, schlagen den '-class' Parameter vor, nicht WSGI. –