Benutzerregistrierung

  • Moin.


    Wenn ich mich fiktiv als Nutzer registriere, bekomme ich eine Mail und alles hat gut geklappt. Wenn ich nun im Frontend bin, muss ich mich als erstes mit meinen Daten anmelden... Diesen Schritt möchte ich überspringen. Ich möchte, dass der Nutzer gleich nach der Registrierung "an den Nektar" kommt - ohne sich noch mal einzuloggen.


    Wie bekomme ich das hin?


    DANKE!

  • Wie bekomme ich das hin?

    Mit einem Plugin sollte das kein Problem sein, zumindest habe ich es so umgesetzt, dass ein User, der sich freischaltet direkt eingeloggt ist.


    onUserBeforeSave wird gecheckt, ob die Begebenheiten die gewünschten sind (Registrierung, Frontend, Freischaltung etc.) und in onUserAfterSave wird für den User die Session gesetzt und er somit eingeloggt.

  • Hier gibt es mindestens 2: https://extensions.joomla.org/tags/login-redirect/

    plg_arasjoomlaautologin

    wbs_autologin

    Hab mir aber nur den Code angeschaut, spreche also keine Empfehlung aus.


    Beide arbeiten nur mit "onUserAfterSave".


    Haben mir also nicht weitergeholfen bei meiner Suche, was es damit auf sich hat:

    onUserBeforeSave wird gecheckt, ob die Begebenheiten die gewünschten sind (Registrierung, Frontend, Freischaltung etc.)

  • Haben mir also nicht weitergeholfen bei meiner Suche, was es damit auf sich hat:

    Beim Freischalten eines Users + Direktlogin gibt es bei einem "onUserAfterSave" ein Problem: man weiß nicht, wie der vorherige Status ist, bevor der User gespeichert wurde.


    Explizit beim Freischalten des Users muss folgendes Kriterium erfüllt sein:


    PHP: plugin.php
    public function onUserBeforeSave($user, $isNew, $data)
    {
        if (Factory::getUser()->guest && $this->app->isClient('site') && !$isNew && $user['block'] && strlen($user['activation']) && !$data['block'] && !strlen($data['activation']))
        {
            $this->loggin = (int) $user['id'];
        }
    }

    Der User darf nicht neu sein, er muss vorher geblockt mit Activation-Token sein und hinterher muss er freigeschalten ohne Token sein (natürlich nur im Frontend).

    Ansonsten könnte es ein anderer Vorgang als Freischalten sein (Profil speichern, PW zurücksetzen, etc.). Diese Statusänderung erkennt man nur wenn man before/after vergleicht.


    Im After dann Permissions-Check (darf der User sich überhaupt einloggen), ist er in der loggin-Variable, ist er nun wirklich freigeschalten, etc. Dann wird er eingeloggt.


    Natürlich könnte man auch auf Views und Tasks checken, aber davon bin ich kein wirklicher Freund, da ich teilweise auch meine eigene Komponente drüber stülpe, die mehr "Intelligenz" hat und ich bin mir dann nicht sicher, ob die Konvertierung von Token + Block zu kein Token, kein Block wirklich stattgefunden hat.


    Für eine Registrierung ohne Freischaltung ist das ganze natürlich eine andere Sache, da brauchts diese ganzen Checks nicht. (und auch das $isNew wird anders genutzt)

  • Danke. Damit sind die beiden oben von mir genannten Plugins "unzureichend" bzw. arbeiten ähnlich (nervig) plump wie Virtuemart und loggen immer sofort ein, wenn $isNew, egal ob aktiviert etc. oder nicht. Auch bei VM holt man dann ja die eigentliche Aktivierung nach für zukünftige Logins.