Empfehlungen: Erweiterte Suche

Helper: Ergebnis speichern?

Unterstützung der Daten-Formatierung in den Views (DRY)

Helper: Ergebnis speichern?

Beitragvon Kratos » Mo 9. Feb 2009, 12:55

Tach,

habe ein Password_Helper. Dieser generiert mir ein Passwort das ich mir in dem View anzeigen lasse. Funktioniert einwandfrei. Nur möchte ich noch das das generierte Passwort hinterher noch mit md5 verschlüsselt und in die DB gespeichert wird . Ist dies möglich?

MFG
Kratos
Kratos
 
Beiträge: 14
Registriert: So 18. Jan 2009, 01:56

Re: Helper: Ergebnis speichern?

Beitragvon euromark » Mo 9. Feb 2009, 13:25

md5 verwendet heute keiner mehr
wenn dann sha1 (was cake automatisch verwendet, wenn du mit $this->Auth->password() es dir umwandeln lässt).

das kannst du direkt im controller machen
und dann dem $this->data array mitgeben und dann speichern
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Helper: Ergebnis speichern?

Beitragvon Kratos » Di 10. Feb 2009, 02:43

Habs jetzt mal versucht. Funktioniert irgendwie nicht so ganz. Hier mal der Code.
Code: Alles auswählen
<?php echo $password->generatePassword();?>

Code: Alles auswählen
$this->data['User']['passwort'] = $this->Auth->password($this->data);

Der Code im Controller ist natürlich nicht korrekt. Hoffe jemand könnte mir da weiter helfen.

MFG
Kratos
Kratos
 
Beiträge: 14
Registriert: So 18. Jan 2009, 01:56

Re: Helper: Ergebnis speichern?

Beitragvon euromark » Di 10. Feb 2009, 13:14

schau doch ma

du könntest $this->data im controller via
pr ($this->data);
mal ausgeben und würdest feststellen, dass das das ganze POST Array ist, was du da encrypten tust (und die funktion erwartet einen string)
was du willst, ist doch nur das Passwort des Input Feldes pw

also

$this->data['User']['passwort'] = $this->Auth->password($this->data['User']['pw']);

WICHTIG:
du solltest unbedingt
unset($this->data['User']['passwort']) aufrufen, bevor der view ausgegeben wird (damit es dort nicht mehr auftaucht)
genauso mit dem pw feld, wenn du nicht möchtest, dass das PW dort nochma angezeigt wird (was man i.d.R. aus Sicherheitsgründen nicht tut).

beachte, dass du die AUTH component dazu eingebunden haben musst
sonst musst du über Security::hash() encrypten, also statisch (denn die Auth Component macht nix anderes wie
auf diese intern zugreifen.
Allerdings ist es sauberer über Auth, weil damit auch deine login/register methods alle über die selbe encrypt method arbeiten
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Helper: Ergebnis speichern?

Beitragvon Kratos » Di 10. Feb 2009, 23:44

Hi euromark!

Das was ich hier habe ist aber kein Input-Feld (würde mir auch sonst keine Kopfschmerzen bereiten). Das was du - der User - nur sieht ist z.B.: 56zg4hfs = das generierte Passwort von meiner Helper-Funktion die im View eingebunden wird, also so
<?php echo $password->generatePassword();?>
Das ist der Code, sonst nichts. Der User kann nicht selber sein Passwort aussuchen (aus Sicherheitsgründen). Er muss (soll) das erstellte PW verwenden. Das was mir Kopfschmerzen bereitet ist aber, dieses generierte Passwort das du im Browser siehst, hinterher noch zu Verschlüsseln und in die DB zu schreiben. Hier mal der Code von der Helper-Funktion, zum selber testen.
Code: Alles auswählen
<?php
class PasswortHelper extends AppHelper {
 
   function generatePasswort ($length = 8)
    {
       
        $password = "";
        $i = 0;
        $possible = "0123456789bcdfghjkmnpqrstvwxyz";
 
       
        while ($i < $length) {
           
            $char = substr($possible, mt_rand(0, strlen($possible)-1), 1);
 
           
            if (!strstr($password, $char)) {
                $password .= $char;
                $i++;
            }
        }
        return $password;
    }
   
}

?>
Kratos
 
Beiträge: 14
Registriert: So 18. Jan 2009, 01:56

Re: Helper: Ergebnis speichern?

Beitragvon euromark » Mi 11. Feb 2009, 00:55

dann ist herangehensweise völlig falsch
das ist dann kein helper, sondern höchstens eine component.
bzw am besten gleich in diesem controller ne hilfsfunktion,
weil dies dann logik ist, und in nem helper nix zu suchen hat

dieser controllerfunktion _generatePw() generiert ein PW, speichert diese in der Session
die eigentliche methode new_password() ruft eben diese unterfunktion auf, übergibt das PW an den view, der zeigt es an
und danach wird das in der session befindliche PW im controller gecryptet und gespeichert

besser wäre es, das PW gleich beim erstellen zu encrypten und speichern, und dann
noch an den view ausgeben, spart man sich das mit der session
aber das hängt natürlich davon ab, wie die funktionalität eingebunden wird.
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Helper: Ergebnis speichern?

Beitragvon Mathias » Mi 11. Feb 2009, 02:31

Es würde ja auch nichts dagegen sprechen, die Generierungsmethode direkt in die Funktion des User erstellens zu packen, wenn du sie sowieso nicht woanders brauchst.
besser wäre es, das PW gleich beim erstellen zu encrypten und speichern, und dann
noch an den view ausgeben, spart man sich das mit der session
aber das hängt natürlich davon ab, wie die funktionalität eingebunden wird.

So würd ich es auch machen. Alles im Controller und dann per Variable raus an die view.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Helper: Ergebnis speichern?

Beitragvon Kratos » Do 12. Feb 2009, 03:22

Habe mich dazu entschlossen Session zu verwenden. Das Passwort wird angezeigt nur wird immer der gleiche Hashwert ("1") gespeichert. Why?
Code: Alles auswählen
$passwort = $this->PasswortHelper->generatePasswort();

$this->data['User']['passwort'] = $this->Auth->password($this->Session->write('passwort', $passwort));

Sorry für diese Kindergartenfrage. Ist halt alles neu für mich.
Kratos
 
Beiträge: 14
Registriert: So 18. Jan 2009, 01:56

Re: Helper: Ergebnis speichern?

Beitragvon Mathias » Do 12. Feb 2009, 13:24

$this->Session->write('passwort', $passwort) gibt dir einen boolean zurück, keinen string.
Somit hasht Auth immer 1. Es sei denn, das Setzen der Variable würde fehlschlagen, dann würde der Hash von 0 rauskommen.
So müsste es funktionieren.
Code: Alles auswählen
$passwort = $this->PasswortHelper->generatePasswort();
$this->Session->write('passwort', $passwort);
$this->data['User']['passwort'] = $this->Auth->password($passwort);


Aber dir ist bewusst, dass du das Passwort clear in der Session speicherst? Das macht für mich jetzt nicht so viel Sinn. Verwendest du es nicht nur einmal, um dem User anzuzeigen, was sein Passwort ist? Das steht ja im Widerspruch zu deinem Sicherheitsaspekt mit dem Passwort generieren.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Helper: Ergebnis speichern?

Beitragvon Kratos » Fr 13. Feb 2009, 02:32

Ist noch Alles in der Konzeptphase. Daher muss noch vieles integriert werden.
Habe aber auch einiges weg gelassen das irrelevant für mein Problem ist.
Was ich aber noch fest gestellt habe: Beim speichern der Daten wird nicht das angezeigte Passwort gespeichert. Vermute mal durch den HTTP-Request wird ein neues PW erstellt. Hier mal ohne Session und Auth_component.
Code: Alles auswählen
$passwort = $this->PasswortHelper->generatePasswort();
   $this->set('passwort',$passwort);
$this->data['User']['passwort'] = $passwort;

Wahrscheinlich auch wieder ganz einfach zu lösen. Im Moment bereitet mir die korrekte Syntax von CakePHP noch Probleme. Muss mich mal richtig einlesen.
Kratos
 
Beiträge: 14
Registriert: So 18. Jan 2009, 01:56

Nächste

Zurück zu Helper

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast