User Namen abfragen

Django, Flask, Bottle, WSGI, CGI…
Antworten
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Hallo zusammen,

ich möchte in Zope den Usernamen abfragen, und habe mit Hilfe des Zope Buch`s folgendes probiert:

Code: Alles auswählen

import AuthenticatedUser

def get_User(self):
    user = AuthenticatedUser.getUserName()
    return user
aber es klappt nicht, diese externe Methode einzubinden, weil AuthenticatedUser nicht gefunden wird,
auch andere Module aus dem Anhang der Doku kann ich nicht verwenden,
woran liegt das denn? :roll:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

mike hat geschrieben:ich möchte in Zope den Usernamen abfragen
Hi mike!

In einem "Python Script" geht das z.B. so:

Code: Alles auswählen

context.REQUEST.AUTHENTICATED_USER
Siehe auch: http://www.python-forum.de/post-39107.html#39107

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Um zum Benutzernamen innerhalb einer "Externe Methode" zu kommen...

Code: Alles auswählen

def get_username(self):
    return self.REQUEST.AUTHENTICATED_USER
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

hallo Gerold,

danke für die Hilfe, es hat geklappt den Usernamen auszulesen,
jetzt habe ich aber schon ein neues Problem, und zwar wenn ich den Usernamen an eine Variable übergebe und diese dann an meinen webservice schicke, dann bekomme ich einen Fehler, mit dem ich nicht viel anfangen kann:

Error Type: faultType
Error Value: ('soapenv:Server.userException', "org.xml.sax.SAXException: Deserializing parameter 'v1': could not find deserializer for type {http://www.w3.org/1999/XMLSchema}Implic ... rerWrapper", '')

wenn ich den Usernamen direkt als string in die Abfrage schreibe, dann funktioniert es...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

mike hat geschrieben:could not find deserializer for type {http://www.w3.org/1999/XMLSchema}Implic ... rerWrapper", '')
Hi mike!

Ich habe keine Erfahrung mit Soap, aber vielleicht hilft es schon, beim Zuweisen des Variablenamens, den Wert explizit noch mit str() oder unicode() umzuwandeln. Es könnte ja sein, dass kein String, sondern stringähnliches Objekt zurück gegeben wird.

Code: Alles auswählen

my_user = str(self.REQUEST.AUTHENTICATED_USER)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Hallo Gerold,

vielen Dank, daran hat`s gelegen... :-)
mike
User
Beiträge: 10
Registriert: Mittwoch 12. Juli 2006, 23:01

Hallo nochmal,

gibt es zufällig auch eine Möglichkeit das Passwort abzufragen?
nicogrubert
User
Beiträge: 6
Registriert: Dienstag 26. November 2002, 22:15
Wohnort: Zürich

Noch ein kurzer Nachtrag:
Falls dir das REQUEST Objekt - aus welchen Gründen auch immer - nicht zur Verfügung stehen sollte, bekommt man den User wie folgt:

Code: Alles auswählen

# Script (Python)
from AccessControl import getSecurityManager
userobj = getSecurityManager().getUser()
return userobj.getUserName()

Das Passwort ist in einem speziellen Attribut "__" (2 Underscores) gespeichert.
Attribute und Methode, die mit einem "_" beginnen, sind besonders geschützt und darauf kannst du in einem Python Script nicht zugreifen (Restricted Python).
Dazu musst du dann eine Externe Methode verwenden, die in etwa folgendes macht (Ungetestet):

Code: Alles auswählen

# External Method 
from AccessControl import getSecurityManager
userobj = getSecurityManager().getUser()
return userobj.__  # unschön
oder besser:

Code: Alles auswählen

return userobj._getPassword() # schön
Ansonsten einfach mal die API der User Klasse anschauen (<Zope_SoftwareHome>\lib\python\AccessControl\User.py).
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hallo!

Um an Mikes Frage zur Ermittlung des Passworts anzuknüpfen:

Vorgeplänkel:
----------------
Für unseren Flugverein verwalte ich den internen Bereich unserer Homepage (Plone-Portal).
Innerhalb dieses Portals läuft eine selbsterstellte Flugplatz-Verwaltungssoftware.

Die Daten (Flüge etc.) werden in einer MySQL-Datenbank verwaltet.

Nun habe ich vor, parallel eine Python-Applikation zu programmieren, um die Flugdatenerfassung
direkt im Flugbetrieb über ein Tool zu ermöglichen, welches schnellere Antwortzeiten als
ein lokal betriebener Server (Kopie des Portals) bietet. Dieses Tool soll über diesselben Zugangsdaten
wie im Portal geschützt werden.

Frage:
-------
Gibt es eine Möglichkeit an die Passwörter von den registrierten Benutzern im Portal zu kommen,
um diese zu allen Mitgliedern in der MySQL-Tabelle zu speichern?

Nachgeplänkel:
-----------------
Beim Registrieren neuer Benutzer speichere ich die Benutzernamen in der MySQL-DB. Hätte ich jetzt
entsprechend eine Passwort-Spalte, könnte ich den Benutzerzugang in der Python-Applikation
leichter realisieren.

Vielen Dank fürs "Zuhören"

JR
Antworten