Ergebnis 1 bis 6 von 6

Thema: Eigenes BE Feld (in tl_member) verschlüsselt speichern - Contao 2.11

  1. #1
    Contao-Nutzer Avatar von simplex3
    Registriert seit
    22.06.2009.
    Ort
    Oldenburg (Oldb.)
    Beiträge
    73

    Standard Eigenes BE Feld (in tl_member) verschlüsselt speichern - Contao 2.11

    Hallo,
    ich möchte ein selbst erstelltes Textfeld (für tl_member) in der Datenbank verschlüsselt speichern (und dann an anderer stelle wieder auslesen können, aber das ist hier nicht das Thema).
    Feld ist über das DCA angelegt (....system\modules\mein_modul\dca\tl_member.php) und ich habe dort ein onsubmit_callback hinzu gefügt. Die Funktion, die durch den Callback aufgerufen wird soll dann den Text des Feldes mittels MySQLs AES_ENCRYPT verschlüsselt in die DB schreiben.
    In einem selbst geschrieben PHP-Script funktioniert das gut, über das Contao-BE wird mir aber der Inhalt des Formularfeldes unverschlüsselt in die DB geschrieben.
    Benutze ich das falsche Callback?
    Der relevante Code:

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_member']['fields']['dummy_password'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_member']['dummy_password'],
        
        
    'exclude'                 => true,
        
    'search'                  => true,
        
    'inputType'               => 'text',
        
        
    'eval'                    => array('feEditable' => false,'feViewable' => true,'feGroup' => 'personal','tl_class' => 'w50','mandatory' => true,'minlength' => 8,'maxlength' => 40,'nospace' => true,'wrap' => 'off'),
            
    'onsubmit_callback' => array
            (
                array(
    'tl_member''encrypPassword')
            )
        );

    //...
    class tl_member_mein_modul extends tl_member
    {
            
    /**
         * Import the member object
         */
        
    public function __construct()
        {
            
    parent::__construct();
        }

    public function 
    encryptPassword(DataContainer $dc)
        {
            if (!
    $dc->activeRecord){
                return;
            }
    $this->Database->prepare("UPDATE tl_member SET dummy_password=AES_ENCRYPT(?,'GeheimesPasswort') WHERE id=?")
                           ->
    execute($dc->activeRecord->dummy_password$dc->id);

    Wäre echt toll, wenn mir jemand einen Tip geben könnte.
    Vielen Dank!

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    nutz doch einfach die Dokumentation:
    https://docs.contao.org/books/manual...er-Arrays.html

    Dann siehst du, dass du nur im eval das Attribut encrypt => true setzen musst. Fertig
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Contao-Nutzer Avatar von simplex3
    Registriert seit
    22.06.2009.
    Ort
    Oldenburg (Oldb.)
    Beiträge
    73

    Standard

    Zitat Zitat von the_scrat Beitrag anzeigen
    Hi,

    nutz doch einfach die Dokumentation:
    https://docs.contao.org/books/manual...er-Arrays.html

    Dann siehst du, dass du nur im eval das Attribut encrypt => true setzen musst. Fertig
    Danke für deine Antwort.
    Ja, richtig: So wird der Eintrag verschlüsselt. Ich will ihn ja aber über meine Funktion verschlüsseln und nicht über Contaos Verschlüsselung.
    Und dazu sollte die Funktion encryptPassword aufgerufen werden (siehe Quellcode).

    Eine Idee?
    Danke.

  4. #4
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Dann liegt der Fehler darin, dass der onsubmit_callback an der Stelle nicht funktioniert. Rest steht in der Doku: https://docs.contao.org/books/manual...html#callbacks
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  5. #5
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich würde den save_callback des Feldes nehmen. Der wird vor dem Speichern des Datensatzes abgearbeitet. Und entsprechend load_callback beim Laden. Der onsubmit_callback wird erst nach dem Speichern des Datensatzes verarbeitet. In dem musst du nachträglich einen Datenbankzugriff machen.

    Gesendet von meinem C6603 mit Tapatalk
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  6. #6
    Contao-Nutzer Avatar von simplex3
    Registriert seit
    22.06.2009.
    Ort
    Oldenburg (Oldb.)
    Beiträge
    73

    Standard

    Danke euch für die Antworten.
    Ich gucke mir diese Callbacks mal an.
    Hoffe, ich darf weiter fragen, wenn ich mich da auch zu blöd anstelle...

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •