turk porno porno escort rokettube
Ergebnis 1 bis 5 von 5

Thema: Update User-Session nach User-Data Change

  1. #1
    Erfahrener Benutzer
    Registriert seit
    07.07.2010
    Beiträge
    118
    Thanks
    7
    Thanked 0 Times in 0 Posts

    Standard Update User-Session nach User-Data Change

    Hey,

    vorweg schon mal vielen Dank für die Hilfe! Ich bin mal wieder an dem User-Modul dran.
    Die Benutzer können nun selbst Ihre Daten bearbeiten.
    Allerdings hat das auch den Nachteil, dass wenn sie ihren Namen ändern, der auf jeder Seite angezeigt wird,
    dieser nicht aktualisiert wird, weil es anscheinend immer aus der Session aufgerufen wird.

    Nun meine Frage ist, wo und wie ich am besten die Session aktualisiere?
    Ich dachte mir, immer direkt nach der updateAction im UserController:

    PHP-Code:
     public function updateAction()
        {
               
    // prepare Post/Redirect/Get Plugin
            
    $prg $this->prg($this->url()->fromRoute('user', array('action' => 'update')),true);
                
            
    // check PRG plugin for redirect to send
            
    if ($prg instanceof Response) {
                return 
    $prg;
        
                
    // check PRG for redirect to process
            
    } elseif ($prg !== false) {
                
    // check for cancel
                
    if (isset($prg['cancel'])) {
                    
    // Redirect to list of blogs
                    
    return $this->redirect()->toRoute('user');
                }            
                
                
    $user $this->getUserService()->getAuthentication()->getIdentity();
                
    $id = ($user->getId());
                
                
    // update with redirected data
                
    $user $this->getUserService()->save($prg$id);
        
                
    // check user
                
    if ($user) {
                    
    // add messages to flash messenger
                    
    $this->flashMessenger()->addMessage(
                            
    $this->getUserService()->getMessage()
                    );
                    
                    
    // Redirect to update user
                    
    return $this->redirect()->toRoute('user', array('action' => 'update'));
                }
            } 
    Alternative in dem UserService
    PHP-Code:
     public function save(array $data$id null)
        {
            
    // check mode
            
    $mode is_null($id) ? 'register' 'update';
            
            
    // get user entity
            
    if ($mode == 'register') {
                
    $user = new UserEntity();
            } else {
                
    $user $this->fetchSingleById($id);
            }
            
            
    // get form and set data
            
    $form $this->getForm($mode);
            
    $form->setData($data);
            
            
    // check for invalid data
            
    if (!$form->isValid()) {
                
    $this->setMessage('Bitte Eingaben überprüfen!');
                return 
    false;
            }
            
            
    // get valid user entity object
            
    $user->exchangeArray($form->getData());
            
            
    // check for password
            
    if ($data['pass'] != '') {
                
    // encrypt password
                
    $bcrypt $this->getAuthentication()->getAdapter()->getBcrypt();
                
    $hash $bcrypt->create($user->getPass());
                
                
    // set values
                
    $user->setPass($hash);
            }
            
            
    // set values
            
    if ($mode == 'register') {
                
    $user->setRole('customer');
            }
            
            
    // get insert data
            
    $saveData $user->getArrayCopy();
            
            
    // insert new user
            
    try {
                if (
    $mode == 'register') {
                    
    $this->getTable()->insert($saveData);
                    
                    
    // get last insert value
                    
    $id $this->getTable()->getLastInsertValue();
                } else {
                    
    $this->getTable()->update($saveData, array('id' => $id));
                }
            } catch (
    InvalidQueryException $e) {
                
    $this->setMessage('Benutzer konnte nicht gespeichert werden!');
                return 
    false;
            }

            
    // reload user
            
    $user $this->fetchSingleById($id);
            
            
    // set success message
            
    $this->setMessage('Die Daten wurden gespeichert!');        

            
    // return user
            
    return $user;
        } 
    Im UserService müsste aber immer erst die richtige Session gesucht werden, welche aktualisiert werden sollte.
    Hätte aber den Charme, das dies auch auswirkung auf dem AdminController hat, also wenn der Admin was ändert.

    Wo würdet ihr es plazieren und wie kann ich die Session bearbeiten. Der DbBcryptAdapter lierfert zumindest für mich ersichtlich keine Möglichkeit.
    Hoffe Ihr könnt mir helfen!

  2. #2
    Erfahrener Benutzer
    Registriert seit
    07.07.2010
    Beiträge
    118
    Thanks
    7
    Thanked 0 Times in 0 Posts

    Standard

    Hat jemand einen Ansatz und könnte mir helfen?
    Danke ;-)

  3. #3
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Ich verfolge da eher einen ganz anderen Ansatz. Zunächst eher notgedrungen, da ich einige Probleme mit der Speicherung der Doctrine2-Objekte (und vor allem aufgrund des Lazy-Loadings) in den Sessions hatte, mittlerweile dürfte es aber gar nicht mal so verkehrt sein. Ich speichere im Endeffekt nur noch die UserID in der Session und lese die restlichen Daten dann aus der Datenbank. Ist dann halt eine zusätzliche DB-Abfrage pro Aufruf, kann ich aber vertragen. Hat auf jeden Fall den Vorteil, das irgendwelche Änderungen (z. B. auch bei Berechtigungen) sofort greifen.

  4. #4
    Erfahrener Benutzer
    Registriert seit
    07.07.2010
    Beiträge
    118
    Thanks
    7
    Thanked 0 Times in 0 Posts

    Standard

    Danke schon mal.
    Ich muss mal ganz blöde fragen, mit diesem Adapter sehe ich die Session selbst ja garnicht?!
    Wo stelle ich den ein, ob aus der DB oder aus der Session?

    https://github.com/ZF2Buch/kapitel21...yptAdapter.php

    Umso mehr ich das so sehe, umso weniger möchte ich auf komplexe Sachen von ZF2 zurück greifen und mir selbst einen Adapter mit Zend\Session bauen. Somit brauche ich Zend\Authentication nicht.

    edit: Wenn du nur die Id in der Session hast, womit überprüfst du die Echtheit der Session, irgend ein Hash aus username & id wäre doch sicherlich der Authentifizierung dienlich??

    edit2: http://framework.zend.com/manual/2.0...r.dbtable.html
    Holt er hier immer alles aus der DB, schreibt er da eine Session mit z.B. UserId?
    Geändert von AllOnline (11.10.2013 um 00:59 Uhr)

  5. #5
    Erfahrener Benutzer
    Registriert seit
    18.05.2012
    Beiträge
    156
    Thanks
    5
    Thanked 29 Times in 22 Posts

    Standard

    Zitat Zitat von AllOnline Beitrag anzeigen
    Ich muss mal ganz blöde fragen, mit diesem Adapter sehe ich die Session selbst ja garnicht?!
    Wo stelle ich den ein, ob aus der DB oder aus der Session?
    Es gibt keine blöden Fragen Die einzige relevante Änderung dort ist bei mir, dass ich bei identity nur $user->getId() übergebe, nicht das gesamte Objekt. Restliche Anpassungen sind bei Adapter nicht erforderlich, da die authenticate-Methode nur von der login-Methode aufgerufen, die wiederum nur beim expliziten Login-Vorgang und nicht bei jedem Seitenaufruf. Die Ermittlung der Identität erfolgt ja im Endeffekt in der Authentication\ServiceFactory. Die sind bei mir im Endeffekt identisch aus. Meine Änderung ist erst in der Acl\ServiceFactory, in welchem ich auf meinen UserService zugreife, um den Benutzer samt Gruppe zu ermitteln.

    Zitat Zitat von AllOnline Beitrag anzeigen
    Wenn du nur die Id in der Session hast, womit überprüfst du die Echtheit der Session, irgend ein Hash aus username & id wäre doch sicherlich der Authentifizierung dienlich??
    Die Session selbst wird echt sein, die kann ja im Endeffekt nur vom ZF erstellt worden sein (sofern man keine anderen Sachen dort drauf laufen hat, welche den gleichen Session Namen nutzen). Gegenfrage: Welchen Unterschied macht es, ob da jetzt nur die ID drin steht oder das gesamte Objekt? Es geht hier ja um Sessions, die können Benutzer ja eigentlich nicht manipulieren. Und im Cookie selbst steht ja nur die SessionID.

    Wenn du dir um die Sicherheit Gedanken machen möchtest, dann gilt es eher zu prüfen, ob die Session überhaupt dem aktuellen Benutzer gehört. Damit habe ich mich bislang noch nicht genauer auseinander gesetzt und weiß nicht, ob das ZF2 standardmäßig noch zusätzliche Kriterien prüft.

    Zitat Zitat von AllOnline Beitrag anzeigen
    edit2: Database Table Authentication — Zend Framework 2 2.0.7 documentation - Zend Framework
    Holt er hier immer alles aus der DB, schreibt er da eine Session mit z.B. UserId?
    Es gibt da ein Codeblock mit echo $result->getIdentity(), dort siehst du ein paar Zielen später den Output: Dort wird der Benutzername in der Session gespeichert. Die restlichen Daten werden dort wenig später erst mit getResultRowObject() ermittelt.

    Ich hoffe, ich irre mich da nicht. Aber im Endeffekt ist es ja egal, was in der Session steht, hauptsache der Benutzer kann identifiziert werden. Irgendwo muss ohnehin eine Grenze gezogen werden. Klar könnte man auch die Benutzergruppe (mit deren Eigenschaften), sämtliche Berechtigungen oder gar private Nachrichten, alle Beiträge des Benutzers oder keine Ahnung was alles. Übertrieben? Genau. Irgendwelche zusätzlichen Informationen zum Benutzer wirst du wohl immer nachladen müssen. Je weniger davon in der Session stecken und dann ganz aktuell aus der DB stammen, desto besser. IMHO.

Ähnliche Themen

  1. DB user switchen
    Von sladda im Forum DB
    Antworten: 6
    Letzter Beitrag: 23.03.2012, 19:06
  2. User Status
    Von frezno im Forum Über das Forum
    Antworten: 11
    Letzter Beitrag: 02.11.2009, 23:51
  3. User-Log
    Von eXcuvator im Forum Konzepte & Ideen
    Antworten: 9
    Letzter Beitrag: 10.08.2009, 12:10
  4. User Online Anzeige
    Von CHAOSFISCH im Forum Einsteigerfragen
    Antworten: 11
    Letzter Beitrag: 16.05.2009, 01:21
  5. User-Login: Problem mit Session ...
    Von Salvatore im Forum Auth
    Antworten: 13
    Letzter Beitrag: 17.08.2008, 13:59

Lesezeichen

Berechtigungen

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