Beiträge von YaYoom

    Hallo,


    ich hätte eine Frage die ACL spezifisch ist.


    Ich nutze Balbooa Gridbox als Pagebuilder/Template. Dort gibt es Authoren, die je einem Joomla 4 Benutzer zugeordnet sind. Nun erstellen diese Autoren bzw. Benutzer eigene Seiten mit Inhalten. Per ACL kann ich den Zugang zu einzelnen Seiten nur für angemeldete Benutzer zulassen (Guest/Registered). Soweit ok! Jetzt ist geplant, den Zugang zu einer Seite eines Benutzers bzw. Autors nur dann zu erlauben, wenn der angemeldete Leser ein Abo mit dem Autor abgeschlossen hat. Ob das der Fall ist, kann ich mit einer Datenbankabfrage lösen. Der Kern der Frage ist, wie ich den Zugang zu einer Seite sichern kann.


    Würde ich Joomla Core ACL nutzen, müßte ich für jeden Benutzer bzw. Autor einen eigenen Access Level anlegen. Das Problem sehe ich, wenn es eine sehr große Anzahl an Autoren gibt (denn, wie beschrieben, ist jeder angemeldete Benutzer gleichzeitig ein Autor).


    Eine Lösung die ich mir überlegt habe, wäre beim laden der Seite am Anfang per PHP zu prüfen, ob ein Abo mit dem Autor besteht und dann


    a) zu einer anderen Seite umleiten

    b) den Zugang erlauben


    Diese Abfrage würde ich per Regularlabs Sourcerer direkt an den Anfang der Seite schreiben, da ich keine Änderungen an Core Files vornehmen möchte.


    Wie würdet ihr diesen speziellen Fall lösen?


    Gibt es ggf. Erweiterungen die genau für diese Art der Sicherheit ausgelegt sind?

    Also...mit nachfolgendem Code erhalte ich das gewünschte BCrypt Passwort


    Code
    $password = UserHelper::hashPassword($password, PASSWORD_BCRYPT);

    Und wie in der nachfolgenden Klasse zu sehen, wird BCrypt auch als Parameter übergeben:


    joomla-cms/UserHelper.php at 3.8.12 · joomla/joomla-cms
    Home of the Joomla! Content Management System. Contribute to joomla/joomla-cms development by creating an account on GitHub.
    github.com


    Code
        public static function hashPassword($password)
        {
            // \JCrypt::hasStrongPasswordSupport() includes a fallback for us in the worst case
            \JCrypt::hasStrongPasswordSupport();
    
            return password_hash($password, PASSWORD_BCRYPT);
        }


    Jetzt mache ich mir nur Sorgen, ob das für die Zukunft so richtig ist. Re:Later hat ja darauf hingewiesen, daß ich BCrypt eben nicht als Parameter übergeben sollte und Joomla eigenständig die beste Methode zur Verschlüsselung wählt.

    Danke.


    Also versucht Joomla 4 die beste Methode auf dem Server zu finden, um das Passwort zu "verschlüsseln". Aber warum verschlüsselt Joomla 4 bei der Registrierung eines neuen Nutzers einmal mit der BCRYPT-Methode [$2y...] (zudem veraltet) und in meinem eigenen Skript mit etwas anderem?


    Für die Registrierung verwende ich ein eigenes Formular mit nachfolgendem Code (Convert Forms).


    Ich habe nun meine PHP Version von 7.4 auf 8.0 für Joomla 4.1.5 angehoben und werde diese beibehalten, solange keine Erweiterung etwas dagegen hat.


    JUserHelper und UserHelper => funktioniert also beides, wobei UserHelper die aktuellere Bezeichnung ist. Danke x2.


    Ursprünglich wollte ich einfach die Datei einbinden und nicht mit einem Auto-Loader arbeiten:

    Code
    include_once JPATH_BASE . '/libraries/src/User/UserHelper.php';


    Leider findet das Skript dann die Klasse nicht, obwohl andere Dateien wie die configuration.php korrekt eingebunden werden.


    Also nutze ich für UserHelper Namespaces am Anfang der Datei:

    Code
    defined('_JEXEC') or die;
    use Joomla\CMS\User\UserHelper;

    Dein Hinweis auf die save() Methode ist sehr nett, aber ich kenne mich so gut wie garnicht mit der Joomla API aus und habe auch keinen Ansprechpartner diesbezüglich (Hobby Programmierer). Ich versuche die Informationen im Netz zu finden, aber für Joomla 4 gibt es nicht wirklich brauchbare Tutorials. Zumindest finde ich keine und suche schon lange.

    Re:Later


    Danke für den Hinweis.


    Ich muss noch einmal nachfragen. Ich verwende die aktuellste Joomla Version 4.1.5.


    Wenn die Passwörter in der Datenbanktabelle "users" in dem Format "$2y... usw." gespeichert sind, wird dann der BCRYPT-Algorithmus verwendet?


    So habe ich deinen Hinweis verstanden.


    Wie wende ich diesen richtig an?


    Nachfolgender Code schreibt anscheinend ein anderes Passwort-Format in die Datenbank.


    Code
    jimport('joomla.user.helper');
    $hashed = UserHelper::hashPassword($password);

    Was ist denn die aktuelle Methode zur Verschlüsselung von Passwörtern?


    Ich denke => Joomla 4 only supports hashing with the native PHP password_hash function (via JUserHelper::hashPassword).


    Damit erhalte ich aber "a37fd...usw."


    Macht es in der neusten Joomla Version einen Unterschied ob ich die Klasse via "JUserHelper" bzw. "UserHelper" anspreche?

    Geiles Ding.


    Über den Stein bin ich vor 10 Jahren einmal gestolpert. Wäre ich jetzt aber im Leben nicht mehr drauf gekommen.


    In der Tat waren die beiden Dateien nicht im UTF-8 Format.


    1. Alle Strings in den Windows Editor zur Zwischenablage kopiert

    2. Alle Strings aus dem language override gelöscht

    3. Datei auf UTF-8 umgestellt

    4. Zeichen gelöscht, die vorher aufgrund falschem Format nicht zu sehen waren

    5. Alle Strings wieder hinein


    Und TATA...jetzt sieht alles richtig aus.


    Böse Falle :)


    Vielen lieben Dank.

    Hallo,


    ich habe eine aktuelle Joomla v4.1.5 Installation mit 2 Sprachen (de-DE/en-GB).


    Standard ist de-DE.


    Nun nutze ich die Language Overrides lokal und lade diese auf den Server:


    root/language/overrides/de-DE.override.ini

    root/language/overrides/en-GB.override.ini


    Das Problem sind die Umlaute ä,ö,ü. Diese werde im Frontend nicht dargestellt.


    Über Admin > System > Manage > Language Overrides wird der gesamte String nicht angezeigt. Sobald ich diesen über das Backend erneut hinzufüge, klappt alles. Dabei wurde der Umlaut z.B. ä in de-DE.override.ini in einen (ich meine) schwedischen Umlaut geändert und alle zuvor eingefügten Kommentare in der Datei wurden gelöscht.


    Gibt es für die Umlaute Problematik eine einfache Lösung, oder muss ich jetzt alle Umlaute durch schwedische Umlaute ersetzen?


    Die Kommentare in der Datei würde ich gerne behalten. Ich schätze ein Herunterladen der override Datei bzw. ein Ändern über das Backend fällt somit flach.

    Ein angemeldeter Benutzer kann im Frontend sein Profil bearbeiten, inklusive Passwort ändern

    Danke für den Hinweis. Ist mir bewusst. Ich möchte aber eine eigene Formular-Extension nutzen, die ich für eine Vielzahl an Formularen verwenden werde. Ein Vorteil ist die Einbindung der Formulare per Modul in mein aktuelles Template (Page Builder) und die Flexibilität in Bezug auf Custom PHP Code.

    Joomla v4.1.5 in Kombination mit Convert Forms v3.2.5 Pro.


    Für angemeldete Benutzer habe ich ein eigenes Formular für die Änderung bestimmter Benutzerdaten erstellt. In diesem Formular möchte ich dem Nutzer die Möglichkeit geben, ebenfalls sein Passwort zu ändern.


    Wenn ich also $password als raw string in meinem Skript erhalte, wie kann ich dieses dann für die Datenbank aufbereiten?


    Danke für den Hinweis bezüglich BCRYPT-Algorithmus.

    Das werde ich später ausprobieren und ist ggf. schon die Lösung.


    Ist der Benutzer nicht angemeldet, würde ich die Joomla 4 eigenen Formulare für "Passwort vergessen" und "Benutzernamen vergessen" im Frontend nutzen!

    Hallo,


    ich nutze aktuell eine Erweiterung für Fronend-Formulare.


    Eines meiner Formular soll es dem angemeldeten Benutzer ermöglichen seine Benutzerdaten und auch sein Passwort zu ändern.


    Frage: wenn ich das neue Passwort aus dem Formular in einem PHP Skript erhalte, wie kann ich dieses dann für die Datenbank richtig verschlüsseln?


    Ich suche seit gestern und habe bislang nur die folgende Information gefunden.


    Code
    jimport('joomla.user.helper');
    $pass = JUserHelper::hashPassword($password);

    Leider scheint da noch etwas zu fehlen. Die Passwörter für Joomla 4 sehen in der Datenbank eher wie folgt aus:


    "$2y$1... usw.".


    Ich erhalte aber:


    "9475... usw."

    Hallo Astrid. Vielen Dank für den Tip.


    Aktuell übersteigt das noch meine Fähigkeiten.


    Derzeit stecke ich mitten in PHP/PDO/OOP/MVC und würde eine weiteren Versuch in Richtung Joomla Module wagen. Leider konnte ich, bis auf einfache Hello World Module, noch keine brauchbaren Tutorials finden. Die Suchmaschine findet leider immer nur alte Tutorials und keine umfassenden Kurse. Ich lerne am besten über Video-Tutorials und learning by doing. Bücher sind mir zu trocken :) Ich könnte mir natürlich bestehende Module anderer Entwickler anschauen, dafür brauche ich aber mehr Grundlagen in den genannten Bereichen und natürlich Joomla 4 API.


    Be water my friend.

    So, es funktioniert. Was ein Krampf :)


    Geholfen hat mir der folgende Beitrag eines Nutzers.


    Wer es nutzen möchte, sollte ausgehend von dem Ordner in dem das Skript liegt nach oben zum Joomla root zählen und den Wert 2 anpassen:


    Code
    define('JPATH_BASE', dirname(__DIR__, 2));



    Oha...die require_once Pfade scheinen sich Case Sensitive zu verhalten.


    Ich habe die Factory Klasse gefunden und eingebunden, funktioniert aber immer noch nicht, wenn ich das exit; rausnehme.


    Da scheint noch etwas zu fehlen.


    JoomlaWunder


    Danke. Bis zum exit; scheint es nun zu funktionieren.


    Nehme ich das exit; raus und versuche an die User ID zu kommen, erhalte ich:


    Sorry, there was a problem we could not recover from.

    The server returned a "500 - Whoops, looks like something went wrong."


    Würde mir für den Moment helfen, aber mein Ansatz ist ein anderer.


    Sollte es wiedererwarten einmal gute Tutorials für Joomla 4 Module geben (damit meine ich nicht Hello World), würde ich bestehende Skripte in ein Modul portieren. Ich möchte aber auf eigene OOP Klassen aufbauen und nur das nötigste aus Joomla holen, damit das Programmierte ggf. auch anderswo eingesetzt werden kann. Ich kenne mich einfach zu wenig mit der Joomla API aus und finde auch keine guten Anleitungen (Videos) diesbezüglich.


    Programmieren ist eher ein Hobby und derzeit setzte ich mich mit OOP (Klassen/Methoden/PDO) auseinander, um kleine Stand Alone Skripte zu schreiben.

    Hallo,


    als Übung habe ich ein eigenes Script in einem Unterordner " root/assets/scripts" erstellt.


    Nun geht es darum, die aktuelle User ID des angemeldeten Joomla 4.1.4 Nutzers zu erhalten.


    Frage:


    Warum funktioniert folgendes Script nicht und wie komme ich an die User ID?


    Ich gehe davon aus, daß ich die Factory Klasse benötige, weiss aber leider nicht wie ich diese korrekt einbinde.


    Die Pfadangaben zu...

    Code
    require_once JPATH_BASE . '/includes/defines.php';
    require_once JPATH_BASE . '/includes/app.php';
    require_once JPATH_BASE . '/includes/framework.php';

    ...scheinen korrekt zu sein. Allerdings wird, wenn ich die require_once Zeilen nutze, danach nichts mehr ausgegeben.


    Habe nun schon 2 Tage im Netz nach einer Lösung gesucht, aber leider nichts gefunden.

    Ich versuche mal eine frische Installation über Plesk. Ggf. wird dort schon alles richtig hinterlegt.


    Ich glaube ich habe die Lösung gefunden.


    In den PHP Einstellungen kann die open_basedir per dropdown gesetzt werden.


    Richtig dürfte sein...


    {DOCROOT}{/}{:}{TMP}{/}


    Teste grad...

    Ui...dummer Fehler meinerseits :)

    Habe über Jahre auf Linux (DomainFactory) installiert und wäre jetzt nicht drauf gekommen, daß es auf einem Windows Server 2016 anders sein könnte :) Doooohhh


    Bitte erlaubt mir, meine aktuelle Problematik noch einmal zu erläutern.

    Denn dieses sind vorerst die letzten Hürden, die ich nehmen muss.


    Folgende Problematiken:


    1. Wenn ich eine Erweiterung in Joomla installieren möchte, erhalte ich einen Fehler.


    Joomla\CMS\Filesystem\Folder::create: Path not in open_basedir paths.

    Cannot create destination folder


    2. Der string "index.php/" kann nicht aus der URL entfernt werden obwohl url rewrite aktiviert sein sollte (laut Strato).


    Joomla => System => Global Configuration

    Search Engine Friendly URLs: YES

    Use URL Rewriting: NO

    Add Suffix to URL: NO

    Unicode Aliases: NO


    Joomla => Plugins => System - Language Filter

    Automatic Language Change: YES

    Remove URL Language Code: NO


    Wenn ich "Use URL Rewriting" nicht aktiviere, funktionieren die nachfolgenden URLs


    http://www.example.org wird umgeleitet auf...


    a) http://www.example.org/index.php/de/

    b) http://www.example.org/index.php/en/


    Wenn ich "Use URL Rewriting" aktiviere, erhalte ich HTTP Error 404.0 - Not Found für die folgenden URLs


    http://www.example.org wird umgeleitet auf...


    a) http://www.example.org/de

    b) http://www.example.org/en


    Fehler:

    HTTP Error 404.0 - Not Found
    The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

    Module IIS Web Core

    Requested URL http://www.example.org:80/de/

    Physical Path C:\Inetpub\vhosts\example.org\httpdocs\de\


    Anmerkung:


    Der Ordner "de" existiert natürlich nicht im ROOT der Joomla Installation.


    // ==========


    Meine Joomla Installation liegt auf localhost Windows 2016 Server + Plesk in folgendem Verzeichnis:

    C:\inetpub\vhosts\example.org\httpdocs


    Die Domain http://www.example.org zeigt auf den Ordner "httpdocs".


    PHP 7.2 mit original php.ini


    // ==========


    .web.config


    .htaccess



    Ich weiss leider nicht mehr weiter.

    Der Strato Support ist zwar erneut kontaktiert, bin mir aber nicht sicher, ob mir dort geholfen werden kann.


    Ist vermutlich nur eine Kleinigkeit, mir fehlt aber leider das Know How.