Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 20. Juli 2015 13:12
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
[GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Hallo liebes Forum,
ich haben einen Kunden der auf seiner Seite zwei unterschiedliche geschützte Bereiche benötigt.
Dazu verwende ich das FrontendUser-Modul, das funktioniert soweit problemlos!
Nun kam plötzlich die neue Anforderung hinzu dass zusätzlich zum Passwort noch ein 5-stelliger Code eingegeben werden muss. Ausserdem soll der FrontendUser bei JEDEM Login nochmals Nutzungsbedingungen per Häckchen bestätigen, die dort verlinkt sein sollen.
Ein Login soll nur möglich sein wenn der FrontendUser Passwort, PIN und Häckchen gesetzt hat.
Ist das Loginformular in dieser Weise erweiterbar?
Die Nutzerkonten werden händisch erstellt, es wird also nicht SelfRegistration verwendet. Es wäre also möglich einfach ein Feld für die PIN anzulegen, der Administrator würde die PIN anlegen und an den FrontendUser übermitteln. Wie funktioniert die Abfrage im Login-Formular? Ist das mit den FEU-Bordmitteln möglich?
Die Passwort, PIN und Häckchen-sache betrifft einen gesonderten Bereich der Website. Ein anderer Bereich soll weniger streng gesichert sein. Dort reicht ein normaler Login. Wie kann ich mehrere Login-templates definieren? Ich habe im FEU nur eine "Anmeldungsvorlage" gefunden.
Falls es nicht anders geht würde ich das Page-Alias abfragen und dann das einfachere bzw. das kompliziertere Formular anzeigen, je nach dem wo man gerade ist. Das könnte doch in einem Template zusammen verpackt werden, oder?
ANDERE FRAGE: Ist es irgendwie möglich eine weitere Instanz von FEU parallel laufen zu lassen?
Es gibt die Anforderung dass die unterschiedlichen Benutzerkonten für die unterschiedlichen Bereiche auch seperat verwaltet werden müssen, Sinnhaftigkeit hin oder her... der Kunde ist König... und will/braucht das so.
Wie klont man das FEU-Modul am besten, gibts da eine Methode die es möglich macht?
Bin gespannt auf euren Input!
1000 Dank im Vorraus.
Beitrag geändert von bd0 (11. August 2015 09:51)
Offline
#2 20. Juli 2015 15:30
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Ist das Loginformular in dieser Weise erweiterbar?
Nein, das ist eine komplett andere Login-Prozedur - müsstest dir zumindest diesen Teil neu programmieren. Denn wenn es um Security geht, würde ich eher nicht auf eine Javascript-Aktion setzen (für die Checkbox).
Wie funktioniert die Abfrage im Login-Formular? Ist das mit den FEU-Bordmitteln möglich?
Wie gesagt, ist eine komplett andere Login-Prozedur? Du kannst die Daten zwar eingeben, aber nach meiner Kenntnis stellt dir das Login-Formular diese Daten nicht zur Verfügung.
Wie kann ich mehrere Login-templates definieren? Ich habe im FEU nur eine "Anmeldungsvorlage" gefunden.
Falls es nicht anders geht würde ich das Page-Alias abfragen und dann das einfachere bzw. das kompliziertere Formular anzeigen, je nach dem wo man gerade ist. Das könnte doch in einem Template zusammen verpackt werden, oder?
Genau das hätte ich vorgeschlagen .
Wie klont man das FEU-Modul am besten, gibts da eine Methode die es möglich macht?
Dazu gibts hier im Forum ein HowTo, wo dies am Beispiel des News-Moduls erklärt wird
Offline
#3 20. Juli 2015 15:59
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
danke für dein schnelles Feedback. Habs befürchtet dass es nicht vorgesehen ist
Naja ist zumindest ne Info die ich dem Kunden weitergeben kann, bzw. die Info dass es Mehraufwand bedeutet. Den Thread zum Newstool hab ich auch schon mal überflogen, wäre ja aber ne Möglichkeit wenigstens diese Teilproblem zu lösen.
Falls noch jemand konkrete Hilfestellung leisten kann was das neu/umprogrammieren der erweiterten Login-Funktionen angeht wäre ich natürlich sehr dankbar. Keine Ahnung wie ich das angehen müsste.
Offline
#4 20. Juli 2015 16:20
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Falls noch jemand konkrete Hilfestellung leisten kann was das neu/umprogrammieren der erweiterten Login-Funktionen angeht wäre ich natürlich sehr dankbar. Keine Ahnung wie ich das angehen müsste.
Ich befürchte, mit einer reinen Hilfestellung ist es nicht getan. Da muss man richtig an die Substanz ran.
Denn allein die Checkbox zur Bestätigung ist ja kein reiner Selbstzweck. Zumindest verstehe ich es so, dass es im Bedarfsfall auch entsprechend kontrolliert werden soll - du, User X, hast am ... um ... die Nutzungsbedingungen bestätigt, also musst du dies, das oder jenes tun / nicht tun. Also sollte mindestens das Datum und die IP geloggt werden.
Hinzu kommt, dass die Anforderungen deines Kunden schon etwas exotisch sind - sprich, die Programmierung erfolgt einzig und allein für diese eine Anwendung und ist für kaum einen anderen nutzbar.
Von daher ist es schwer, da schnell (und vor allem for free) eine Lösung aus dem Boden zu stampfen. Und das Motto unseres Forums lautet ja eigentlich primär "Hilfe zur Selbsthilfe" ...
Offline
#5 20. Juli 2015 16:43
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Die Checkbox muss denke ich nicht geloggt werden. Wenn man sich eingeloggt hat hat man quasi zwangsläufig zugestimmt, sonst liesse sich das Formular nicht abschicken.
Na ich setzte mich halt mal mit dem Thema auseinander. Habe mir bislang den code vom FEU Modul nicht angeschaut, aber vielleicht kann ich mir ja was zusammenstückeln. Wenn ich den Code finde der für die Überprüfung des Passworts zuständig ist kann ich ja vielleicht was für die PIN-Eingabe ableiten... naja die Hoffnung stirbt zuletzt
Vielleicht kann ichs dem Kunden ja auch ausreden
Offline
#6 20. Juli 2015 17:27
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Na ich kenn ja die Nutzungsbedingungen nicht, inwieweit der Login bei Bedarf "gerichtsfest" sein muss .
Wenn es nicht geloggt werden muss, könntest du ja evtl. doch Javascript einsetzen - der Login ist so lange ausgegraut, bis die Checkbox aktiviert ist...
Für die PIN-Box brauchst du zwei Teile, einen, der zunächst das PIN-Field erzeugt, und einen, der das ganze dann auswertet. Je nachdem, wie versiert du bist, kannst du für beide Teile Muster dafür im FEU-Modul finden.
Offline
#7 21. Juli 2015 09:10
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Hab mir das Modul angeschaut. Glaube nicht das ich das "mal eben" umgebaut bzw. erweitert bekomme
Am nachhaltigsten wäre es vermutlich wenn calguy die benötigten Funktionen einbauen würde. Laut seiner Website gibt er ja bezahlten support... fliesst so eine Erweiterung dann ggf. auch in die "normale" Version ein?
Ein dranbasteln hat vermutlich den Nachteil dass es nach dem nächsten Update überschrieben würde, richtig?
Beitrag geändert von bd0 (21. Juli 2015 09:11)
Offline
#8 21. Juli 2015 09:43
- Janl
- Server-Pate
- Ort: Freistadt, Österreich
- Registriert: 13. Dezember 2010
- Beiträge: 1.231
- Webseite
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Wenn man im Anmelde-Template Häckchen und PIN dazu gibt mit assign und wegschreibt in ein Cookie.
Dann könnte man doch bei der Seitenanruf kontrollieren ob beide gesetzt sind, wenn nicht dann umleiten.
Nur so ein Idee.
M.f.G.
Jan
Kubuntu 22.04 - Win 11 pro / Kubuntu 20.04 - win10 pro
Offline
#9 21. Juli 2015 10:28
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Hab mir das Modul angeschaut. Glaube nicht das ich das "mal eben" umgebaut bzw. erweitert bekomme
Am nachhaltigsten wäre es vermutlich wenn calguy die benötigten Funktionen einbauen würde.
Ist vielleicht gar nicht erforderlich - mir ist da etwas eingefallen. Schau mal hier
http://dev.cmsmadesimple.org/projects/feu_auth_basic
http://dev.cmsmadesimple.org/projects/feu_auth_imis
http://dev.cmsmadesimple.org/projects/feu_auth_ldap
Das sind alles Module, die dem FEU-Modul eine eigene Login-Prozedur hinzufügen. Mit diesen als "Muster" ließe sich evtl. auch dein Anliegen umsetzen ... und so findet sich beim ersten Link folgender Hinweis
This module is a simple example module to show how to do authentication modules for FEU.
Offline
#10 21. Juli 2015 10:38
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Interessant.
Ich hätte es jetzt mit einem Plugin/UDT erledigt:
D.h. Du schickst das Login-Forlumar nicht an FEU sondern an die aktuelle Seite und statt FEU wertet das Plugin/der UDT das Formular aus und führt anschließend die Login-Funktion von FEU aus. Also im Login-Formular-Template nicht {$startform} oder so verwenden sondern das Formular selbst bauen:
<form action="{$smarty.server.PHP_SELF}" ... >
Die beiden Felder für AGB und PIN fügst Du im Formular nach Benutzername/Passwort selbst hinzu:
<input type="checkbox" value="1" name="{$actionid}feu_agb" />
<input type="text" value="" name="{$actionid}feu_pin" />
Das Plugin/der UDT wertet dann zunächst aus, ob die Checkbox gesetzt ist und die eingegebene PIN mit der des Benutzers übereinstimmt. Falls nicht, erfolgt kein Login. Ansonsten ruft das Plugin dann die FEU-Funktion zum Einloggen auf und übergibt dabei die Formular-Daten.
Bsp. (ungetestet):
[== UDT ==]
if(!$feu = &cms_utils::get_module('FrontEndUsers'))
return;
array_walk_recursive($_POST, 'sanitize_input_array');
# Get ModuleName, ModuleID, ModuleAction
if (isset($_REQUEST['module']))
$module = $_REQUEST['module'];
if (isset($_REQUEST['action']))
$action = $_REQUEST['action'];
if (isset($_REQUEST['id']))
$id = $_REQUEST['id'];
elseif (isset($_REQUEST['mact']))
{
$tmp = explode(',', cms_htmlentities($_REQUEST['mact']), 4);
$module = isset($tmp[0]) ? $tmp[0] :'';
$id = isset($tmp[1]) ? $tmp[1] :'m1_';
$action = isset($tmp[2]) ? $tmp[2] : '';
}
if($module !== 'FrontEndUsers' || $action !== 'do_login')
return;
# Get ModuleParams
$_params = array_merge($_GET, $_POST);
$params = array();
foreach($_params as $k=>$v)
{
if(strpos($k, $id) !== 0)
continue;
$params[substr($k, strlen($id))] = $v;
}
$agb = isset($params['feu_agb']) && $params['feu_agb'] == 1;
$pin = isset($params['feu_pin']) && $params['feu_pin'] != '';
$smarty = &cmsms()->GetSmarty();
if(!$agb)
$smarty->assign('login_error_msg_agb', 'Sie müssen den Nutzungsbedingungen zustimmen um sich anmelden zu können.');
if(!$pin)
$smarty->assign('login_error_msg_pin', 'Sie müssen eine gültige PIN eingeben.');
if($agb && $pin)
{
$error = false;
# 1. UserID holen
if(!$uid = $feu->GetUserID($params['feu_input_username']))
{
$smarty->assign('login_error_msg_user', 'Der Benutzer "' . $params['feu_input_username'] . '" existiert nicht oder das Passwort ist stimmt nicht überein.');
return;
}
# 2. PIN auslesen
if(!$_pin = $feu->GetUserPropertyFull('pin', $uid))
{
$smarty->assign('login_error_msg_pin', 'Für diesen Benutzer wurde noch keine PIN hinterlegt.');
return;
}
# 3. PIN vergleichen
if($params['feu_pin'] !== $_pin)
{
$smarty->assign('login_error_msg_pin', 'Die eingegebene PIN ist fehlerhaft.');
return;
}
# 4. login
$feu->DoAction('do_login', $id, $params, $params['returnid']);
}
Und im Seitentemplate fügst Du diesen UDT vor dem Login-Formular ein.
Im Login-Formular-Template prüfst Du, ob die vom UDT generierten Fehlermeldungen existieren und gibst sie an gegebener Stelle aus.
Das Ganze könnte man natürlich auch in Form eines Moduls machen.
Wäre sogar ratsam, weil man dieses Plugin umgehen kann, wenn man die Login-URL zum FEU-Modul kennt.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#11 21. Juli 2015 11:41
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Hey Leute, ihr seid spitze!
Da hab ich ja mal Lektüre für heute Abend
Mal sehen ob ich das mit eurer Hilfestellung gestemmt bekomme.
Offline
#12 03. August 2015 20:18
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
hab mich inzwischen daran versucht, bekomme es aber bislang leider nicht ans laufen.
Mir fehlen einfach zu viele Grundlagen um mich da durchzufummeln. Denke der Ansatz von NaN sollte funktionieren und vollkommen ausreichen. Mit den Modulen die Cyberman verlinkt hat komme ich leider auch nicht weiter. Da fehlt jeglich Dokumentation.
Kann mir da jemand weiterhelfen, liebend gerne auch gegen Bezahlung. Wäre wirklich froh wenn das jemand übernehmen könnte!
edit: vorerst würde auch erstmal die Überprüfung des zweiten Passworts ausreichen!
Beitrag geändert von bd0 (04. August 2015 07:27)
Offline
#13 04. August 2015 10:26
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Welche Versionen hast du am Laufen (CMSMS, FEU)?
Offline
#14 04. August 2015 11:27
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
CMS-Version 1.12
FrontEndUsers 1.29
sollte beides aktuell sein.
Offline
#15 05. August 2015 15:19
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
habe es jetzt lange vor mir hergeschoben... muss das Ding endlich ans laufen bringen.
Mir reicht es erstmal wenn die PIN ausgewertet wird.
Ich muss dazusagen dass ich mich generell mit der erstellung von Formularen aus technischer Sicht nicht auskenne. Formulare lege ich üblicherweise mit Formbuilder an. Ich bitte daher um ein wenig Nachsicht beim lesen und ggf. beantworten des folgenden. Es sind mit Sicherheit sehr grundlegenden Fragen.
Ich habe zur UDT-Lösung noch zahlreiche Fragen.
Also im Login-Formular-Template nicht {$startform} oder so verwenden sondern das Formular selbst bauen
was genau macht {$startform} was macht {$endform}?
<form action="{$smarty.server.PHP_SELF}" ... >
wofür ist das, bzw. was wäre ...?
Die beiden Felder für AGB und PIN fügst Du im Formular nach Benutzername/Passwort selbst hinzu:
Ich habe das PIN-Feld in der "Anmeldungsvorlage" von FrontendUser hinzugefügt.
Dort habe ich bereits den Umschalter per $page_alias eingebaut.
{if $page_alias == "extendedLogin"}
#UDT Aufruf
{pin_kontrolle}
<input type="email" id="feu_username" name="{$fldname_username}" value="{$username}" size="20" maxlength="20" required/>
<input type="password" id="feu_password" name="{$fldname_password}" value="{$password}" size="20" maxlength="20" required/>
#zusätzliches PIN-feld
<input type="text" value="" name="{$actionid}feu_pin" size="4" maxlength="4" required/>
{/if}
Das funktioniert gut. Wenn man auf die Loginseite mit der Zusatzpin geht wird dort das Feld angezeigt.
Das wird auch richtig angezeigt.
Ist das soweit richtig oder muss das Formular ganz anders neu aufgebaut werden?
nun zum UDT von Nan:
Ich habe es mal ein wenig zerpflückt.
Der erste Teil. Muss ich hier irgendwas verändern oder kann das so bleiben?
[== UDT ==]
if(!$feu = &cms_utils::get_module('FrontEndUsers'))
return;
array_walk_recursive($_POST, 'sanitize_input_array');
# Get ModuleName, ModuleID, ModuleAction
if (isset($_REQUEST['module']))
$module = $_REQUEST['module'];
if (isset($_REQUEST['action']))
$action = $_REQUEST['action'];
if (isset($_REQUEST['id']))
$id = $_REQUEST['id'];
elseif (isset($_REQUEST['mact']))
{
$tmp = explode(',', cms_htmlentities($_REQUEST['mact']), 4);
$module = isset($tmp[0]) ? $tmp[0] :'';
$id = isset($tmp[1]) ? $tmp[1] :'m1_';
$action = isset($tmp[2]) ? $tmp[2] : '';
}
if($module !== 'FrontEndUsers' || $action !== 'do_login')
return;
# Get ModuleParams
$_params = array_merge($_GET, $_POST);
$params = array();
foreach($_params as $k=>$v)
{
if(strpos($k, $id) !== 0)
continue;
$params[substr($k, strlen($id))] = $v;
}
$pin = isset($params['feu_pin']) && $params['feu_pin'] != '';
$smarty = &cmsms()->GetSmarty();
Verstehe davon ganz grob was in etwa passiert, kann aber nicht sagen was genau bzw. was ich ändern müsste.
Die AGB-prüfung habe ich hier entfernt.
if(!$pin)
$smarty->assign('login_error_msg_pin', 'Sie müssen eine gültige PIN eingeben.');
if($pin)
{
$error = false;
# 1. UserID holen
if(!$uid = $feu->GetUserID($params['feu_input_username']))
{
$smarty->assign('login_error_msg_user', 'Der Benutzer "' . $params['feu_input_username'] . '" existiert nicht oder das Passwort ist stimmt nicht überein.');
return;
}
# 2. PIN auslesen
if(!$_pin = $feu->GetUserPropertyFull('pin', $uid))
{
$smarty->assign('login_error_msg_pin', 'Für diesen Benutzer wurde noch keine PIN hinterlegt.');
return;
}
# 3. PIN vergleichen
if($params['feu_pin'] !== $_pin)
{
$smarty->assign('login_error_msg_pin', 'Die eingegebene PIN ist fehlerhaft.');
return;
}
# 4. login
$feu->DoAction('do_login', $id, $params, $params['returnid']);
}
Offenbar ist es so dass im meiner FEU Version die Inhalte anders abgefragt werden?
In der Modulhilfe steht es mit:
username: {feu_smarty::get_username()}
userID: {feu_smarty::get_userid($username)}
pin: {feu_smarty::get_user_property('pin')}
drin. Und der Hinweis "And all methods must be accessed statically. Additionally, there is no assign param. You must capture the output of the function into a smarty variable."
Habe die Werte im eingeloggten Zustand mit obigen Tags auch schon angezeigt bekommen, das funktioniert prinzipiell.
im UDT von Nan steht beispielsweise
if(!$uid = $feu->GetUserID($params['feu_input_username']))
kann ich das einfach mit
{capture assign="MyUserID"}{feu_smarty::get_username()}{/capture}
if(!$uid = $MyUserID)
ersetzen?
So wie es im moment drin ist funktioniert es leider nicht.
Wenn ich Username und Passwort + falsche PIN eingebe loggt er sich ein als wäre nichts
Wenn ich Username und Passwort + richtige PIN eingebe loggt er sich ein als wäre nichts
Wenn ich Username und falsches Passwort + eine falsche PIN eingebe loggt er sich nicht ein läuft aber ansonsten.
Wenn ich Username und falsches Passwort + eine richtige PIN eingebe rödelt er ne weile und zeigt dann einen weissen Screen
Also irgendwas macht er.
Ich kann aber nicht feststellen an welchen Stellen die Fehler stecken.
Offline
#16 06. August 2015 08:49
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
was genau macht {$startform} was macht {$endform}?
{$startform} gibt lediglich den Beginn des Formulars aus:
<form action="url zur aktuellen Seite" method="post" ... etc. >
Und zusätzlich noch ein paar versteckte input-Felder damit a) CMSms weiß, dass es eine Modulaktion ist und b) damit das Modul weiß, welche Aktion.
Und {$endform} macht nichts weiter als das Formular mit </form> zu schließen.
Simples HTML halt.
Wenn Du statt {$formstart} den Beginn des Formulars selber aufbaust (also ohne diese versteckten Inputfelder), kann CMSms damit nichts anfangen - wohl aber Dein UDT.
<form action="{$smarty.server.PHP_SELF}" ... >
wofür ist das, bzw. was wäre ...?
Na das wäre stellvertretend für {$formstart}.
{$smarty.server.PHP_SELF} ist die aktuelle URL.
An diese soll das Formular gesendet werden.
Schau doch einfach mal im Frontend im HTML-Code wie das Login-Formular am Ende aufgebaut ist.
Den <form>-Tag kopierst Du einfach ins Template und passt die URL beim Attribut "action" an.
Näheres zum Thema Formluare findest Du z.B. hier.
Füge nach <form> mal noch ein verstecktes Feld mit der Modul-ID hinzu:
<input type="hidden" value="{$actionid}" name="feu_action_id" />
Ich habe das PIN-Feld in der "Anmeldungsvorlage" von FrontendUser hinzugefügt.
Dort habe ich bereits den Umschalter per $page_alias eingebaut.
[...]
Ist das soweit richtig oder muss das Formular ganz anders neu aufgebaut werden?
Sieht soweit gut aus.
Bis auf den UDT-Aufruf.
Der gehört ins Seitentemplate. Dort wo Du das FrontEndUsers-Modul mit dem Login-Formular aufrufst. Und zwar direkt davor. Im Login-Template ist es bereits zu spät.
Im Login-Template kannst Du z.B. so Fehler abfangen und eine Meldung ausgeben:
{if $page_alias == "extendedLogin"}
{ * Fehlermeldungen aus dem UDT abfragen: * }
{if isset($login_error_msg_user)}
<p class="error">{$login_error_msg_user}</p>
{/if}
{if isset($login_error_msg_pin)}
<p class="error">{$login_error_msg_pin}</p>
{/if}
<input type="email" id="feu_username" name="{$fldname_username}" value="{$username}" size="20" maxlength="20" required/>
<input type="password" id="feu_password" name="{$fldname_password}" value="{$password}" size="20" maxlength="20" required/>
{ * zusätzliches PIN-feld * }
<input type="text" value="" name="{$actionid}feu_pin" size="4" maxlength="4" required/>
{/if}
nun zum UDT von Nan:
Ich habe es mal ein wenig zerpflückt.
Der erste Teil. Muss ich hier irgendwas verändern oder kann das so bleiben?
Ich hatte das zum Teil aus dem CMSms-Core kopiert. Es geht darum, herauszufinden, ob beim Laden der Seite mit dem UDT gerade eine Modul-Aktion ausgeführt werden soll oder nicht. Damit der UDT da nicht dazwischenfunkt. Er soll nur dann dazwischenfunken, wenn es sich um das FrontEndUsers Modul handelt. Aber auch nur dann, wenn es sich um die Login-Aktion handelt. In jedem anderen Fall macht der UDT einfach nichts. Ist aber quatsch. Denn wenn Du statt {$formstart} Dein eigenes <form>-Tag verwendest, ist das ja überhaupt nicht nötig. Dann reicht es, die "feu_action_id" zu prüfen. (siehe oben "verstecktes Feld")
Also ändere den Teil mal so ab:
# FEU installed and active? if not -> do nothing.
if(!$feu = &cms_utils::get_module('FrontEndUsers'))
return;
# some security stuff since no one else will do it this time
array_walk_recursive($_POST, 'sanitize_input_array');
# we did not sent the login-form? -> Do nothing.
if(!isset($_POST['feu_action_id']))
return;
# module id
$id = $_POST['feu_action_id'];
# Get ModuleParams
$_params = array_merge($_GET, $_POST);
$params = array();
foreach($_params as $k=>$v)
{
if(strpos($k, $id) !== 0)
continue;
$params[substr($k, strlen($id))] = $v;
}
$pin = isset($params['feu_pin']) && $params['feu_pin'] != '';
$smarty = &cmsms()->GetSmarty();
Offenbar ist es so dass im meiner FEU Version die Inhalte anders abgefragt werden?
In der Modulhilfe steht es mit:username: {feu_smarty::get_username()}
userID: {feu_smarty::get_userid($username)}
pin: {feu_smarty::get_user_property('pin')}
Du vermischst hier zwei verschiedene Sachen.
Geschweifte Klammern = SMARTY.
D.h. Code, der ins Template gehört.
Was ich gemacht habe, ist PHP.
Das ist Code, der in ein Plugin oder einen UDT gehört.
Du verwendest z.B. in Deinem Beitrag das PHP-Kommentarzeichen # im Smarty-Template
Kommentare in Smarty-Templates macht man aber ebenfalls mit geschweiften Klammern und einem *:
{* dies ist ein kommentar *}
Anderenfalls wird der Kommentar im FrontEnd als Text angezeigt.
im UDT von Nan steht beispielsweise
if(!$uid = $feu->GetUserID($params['feu_input_username']))kann ich das einfach mit
{capture assign="MyUserID"}{feu_smarty::get_username()}{/capture} if(!$uid = $MyUserID)
ersetzen?
Nein.
Weil das zwei völlig verschiedene Sprachen sind.
Du kannst zwar im Template mit {feu_smarty:: ...} diverse Dinge abfragen, aber Du kannst keinen Login durchführen.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#17 06. August 2015 09:11
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Hallo NaN,
danke für dein ausführliches Feedback. Hab zwar immer noch Fragezeichen, aber der Schleier lüftet sich ein wenig...
Wegen der Smarty <-> PHP Sache
hat dann der ursprüngliche Code
[== PHP ==]
if(!$uid = $feu->GetUserID($params['feu_input_username']))
noch seine Gültigkeit?
D.h. die Änderungen an das Smarty-Ausgabe haben keinen Effekt für den PHP-Aufruf, richtig?
Auf Smarty-Ebene komm ich eigentlich immer einigermassen zurecht. Bei PHP wirds dann völlig diffus
Ich werde mich heute Nachmittag nochmal daran versuchen.
Weiss noch nicht ob es bis ans Ziel reichen wird, aber wir werden sehen
Vielen dank erstmal für die tolle Unterstützung!
Beitrag geändert von bd0 (07. August 2015 14:08)
Offline
#18 06. August 2015 11:03
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Wegen der Smarty <-> PHP Sache
hat dann der ursprüngliche Code
[== PHP ==] if(!$uid = $feu->GetUserID($params['feu_input_username']))
noch seine Gültigkeit?
Ja.
Im prinzip steht da nichts weiter als das:
# Userid anhand des im Login-Formular eingegebenen Usernamens ermitteln:
$uid = $feu->GetUserID($params['feu_input_username']);
# wenn keine Userid zum Usernamen gefunden werden kann:
if(!$uid) ...
Das ganze hab ich nur in einer Zeile zusammengefasst.
D.h. die Änderungen an das Smarty-Ausgabe haben keinen Effekt für den PHP-Aufruf, richtig?
Ja.
Mit Smarty allein kannst Du nichts ändern.
Es ist eigentlich primär dazu gedacht, Dinge auszugeben.
Für komplexere Sachen bist Du auf PHP-Scripte angewiesen, die Du zwar von Smarty aus in Form von Plugins etc. aufrufen kannst, aber auf die Funktionen innerhalb dieser PHP-Scripte hast Du von Smarty aus meist keinen Zugriff.
Um z.B. ein Login von FEU anzustoßen, muss eine Modul-Interne Funktion des FEU-Moduls ausgeführt werden.
Und auf die Hast Du eben nur über PHP Zugriff.
(Naja, im Prinzip könnte man das vielleicht auch rein in Smarty machen, aber das wird für Dich nicht einfacher Es sind trotzdem PHP-Funktionen die Du da aufrufst. Und das sind nicht die, die in der Modul-Hilfe stehen.)
Aus Smarty-Ebene komm ich eigentlich immer einigermassen zurecht. Bei PHP wirds dann völlig diffus
Macht nichts.
Die beiden sind sich eigentlich sehr ähnlich.
Smarty ist PHP.
Smarty ist nur etwas einfacher gehalten, weil es eben nicht auf Ebene der Ausführung komplexer Funktionen sondern auf der Ebene der Anzeige ausgelegt ist. Eine Art "Design-Sprache". Hier und da ein paar Platzhalter mit geschweiften Klammern im ansonsten simplen HTML-Code. Aber hinter diesen Platzhaltern verbirgt sich dann auch nichts weiter als PHP-Code.
Was Smarty am Ende macht, ist - vereinfacht ausgedrückt - das gesamte Template in PHP-Code umzuwandeln und im Cache als PHP-Datei zu speichern, die dann einfach ausgeführt wird. Mit jeder Zeile Smarty schreibst Du also indirekt PHP-Code.
Daher ergibt es auch nicht viel Sinn, den Login von Smarty aus anstoßen zu wollen, weil das doppelte Arbeit bedeuten würde. PHP-Code in Smarty zu übersetzen, nur damit am Ende wieder PHP-Code daraus gemacht wird ...
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#19 07. August 2015 15:43
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Hurra! Es funktioniert prinzipiell.
Hab jetzt ne weile rumprobiert...
Erstmal ist garnichts passiert. Keine Fehlermeldung, einfach bei "Submit" auf die Startseite gesprungen, ohne einzuloggen.
Das
<form action="{$smarty.server.PHP_SELF}" >
funktioniert nicht. Habe dann im HTML-Code gesehen dass für action="/index.php" ausgegeben wurde.
Ich hab jetzt einfach mal den aktuellen Pfad von Hand eingetragen. Damit klappts!
Einloggen klappt nun nurnoch mit zusätzlicher PIN-Eingabe.
Ein Schönheitsfehler ist irgendwo noch drin. Wenn die PIN stimmt aber das Passwort falsch ist wird unter das bestehende Eingabeformular, das mit Werten gefüllt bleibt ein weiteres leeres darunter gesetzt.
Woran kann das liegen?
Aber es läuft! 1000 Dank für die großartige Unterstützung!
Offline
#20 07. August 2015 19:41
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Das mit dem Schönheitsfehler kann ich mir höchstens so erklären, dass die Login-Funktion, die vom UDT aus ausgeführt wird, automatisch das Login-Formular anzeigt, wenn das Passwort nicht stimmt. Dadurch hast Du das Formular zweimal drin. Einmal durch den UDT und einmal durch den Aufruf des FEU-Moduls im Seiten-Template.
Das könnte man evtl. mit einer Variable abfangen, die vom UDT befüllt wird, sobald die Login-Funktion ausgeführt wird.
Also im UDT steht ja unten:
...
# 4. login
$feu->DoAction('do_login', $id, $params, $params['returnid']);
}
Da einfach noch diese Zeile hinzufügen:
...
# 4. login
$feu->DoAction('do_login', $id, $params, $params['returnid']);
$smarty->assign('feu_login', true);
}
Dann kannst Du im Seiten-Template vor dem FEU-Aufruf diese Variable so abfragen:
{pin_kontrolle}
{if !isset($feu_login)}
{FrontEndUsers}
{/if}
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#21 11. August 2015 09:50
- bd0
- Server-Pate
- Ort: Köln
- Registriert: 22. Juni 2011
- Beiträge: 208
Re: [GELÖST] FrontendUser FEU - login erweitern/aufbohren/duplizieren
Hallo NaN,
1000 Dank! Die Zusatzvariable hat das Problem mit den zwei Login-Formularen gelöst! Es funktioniert nun einwandfrei, soweit ich das sehe.
Nochmals vielen Dank für die tatkräftige Unterstützung!
Offline
Seiten: 1