GunterEibl.de
Zum Inhalt springen
  • Startseite
  • Projekte
  • Technik
  • Impressum

RememberMe = ‚Angemeldet bleiben‘ im Security-Modul

Veröffentlicht am 5. September 201622. August 2017 von Gunter

Funktionalität ‚Angemeldet bleiben‘ im Scriptcase Security-Modul nachrüsten

Mit Scriptcase kann man relativ einfach ein übergreifendes Sicherheits-System implementieren.
Dazu ruft man im Menü ‚Tools > Security‘ auf und folgt den Dialogen.

Dabei werden Tabellen und Applikationen für das Anmelden und die Verwaltung von Benutzern, Gruppen etc. automatisch erzeugt.

Allerdings fehlt in diesem Modul die heute recht gebräuchliche Funktionalität, mit der sich Benutzer, die auf eigenen Computern arbeiten, die Anmeldung für einen gewissen Zeitraum automatisieren können.

Hier eine Möglichkeit eine solche ‚Remember-Me‘ Funktion nachzurüsten.
Es werden dabei Cookies genutzt, die auf dem Computer des Benutzers gespeichert werden und beim nächsten Aufruf des ‚app_Login‘ die Anmeldung automatisch vornehmen.

1. Dazu brauchen wir ein zusätzliches Feld in der Tabelle sec_users:  

Feldname: remember_me
Typ:   Text
Standardwert:   “   (leer),  kein NULL erlaubt

 

2. Ein neues Feld in der Applikation app_Login, die beim Erzeugen des Sicherheits-Systems erstellt wurde:

Wir erstellen ein Feld vom Typ Checkbox mit dem Namen remember_me und tragen in den Lookup Setting manuell nur einen Wert ein. Wichtig ist hier der Wert 1; als Beschriftung könnte deutsch z.B. stehen: Anmeldung merken

Neues Feld remember_me einfügen

(zum Vergrößern klicken)

Das Feld wird entsprechend positioniert:

Positionieren des neuen Feldes remember_me

(zum Vergrößern klicken)

 

3. Funktionalität in Events on_Validate und on_Validate_Success in eigene php-Methoden (Funktionen) auslagern

Da der Code der Ereignise on_Validate und on_Validate_Success in Zukunft zweimal benötigt wird, werden sie in neue PHP-Methoden ausgelagert.
In den Ereignis-Einstellungen verbleiben nur noch die Funktionsaufrufe:

remember_me_3a

remember_me_3b

 

4. PHP-Code in der neuen php-Methode  validate_success_function() ergänzen

Vor der Weiterleitung am Ende des Codes sc_redir(‚…‘) wird der folgende Code eingefügt:

// REMEMBER ME - Wenn ausgewählt, das cookie entsprechend setzen
 if ({remember_me}==TRUE)
 {
 $cookiehash = md5(sha1([usr_login] . $_SERVER['REMOTE_ADDR']));
 setcookie("esdcloud_user",$cookiehash,time()+3600*24*30,'/','.'.$_SERVER['SERVER_NAME']);
 }
 else
 {
 $cookiehash = '';
 }
 sc_exec_sql("UPDATE `sec_users` SET `remember_me`='" . $cookiehash . "' WHERE `login`='" . [usr_login] . "'");


5. Es wird eine neue php-Methode eingefügt: 

Name: check_cookie_login

$t_usr_login = $_COOKIE['esdcloud_user']; 
if (!empty($t_usr_login)) 
 { 
 $sql_remember_me = "SELECT remember_me,pswd,login FROM `sec_users` WHERE `remember_me`='" . $t_usr_login. "'";
 sc_select(my_data, $sql_remember_me);
 if ({my_data} === false)
  {
   die( "Access error. Message =". {my_data_erro});
  }
 else
  {
   if (!$my_data->EOF)
     {
      $t_cookie_hash = $my_data->fields['remember_me'];
      $t_pswd = $my_data->fields['pswd'];
      $t_login = $my_data->fields['login'];
     }
   else
     {
      $t_cookie_hash = 'ERROR';
      $t_pswd = '';
      $t_login = '';
     }
   $my_data->Close();
 }
if ($t_cookie_hash==$_COOKIE['esdcloud_user'])
 {
    {login} = $t_login;
    {pswd} = $t_pswd;
    // reset expiry date
    setcookie("esdcloud_user",$t_cookie_hash,time()+3600*24*30,'/','.'.$_SERVER['SERVER_NAME']);
     return TRUE;
   }
 else
     { // Kein schon gemerktes Login, oder falsch
       {login} = '';
       {pswd} = '';
       return FALSE;
     }
   }
 else
   { // Kein schon gemerktes Login, oder falsch
     {login} = '';
     {pswd} = '';
     return FALSE;
   }

6. Im Code des Ereignisses einfügen:

Beim Laden des app_Login muß geprüft werden, ob auf dem Computer des Anwender ein entsprechendes Cookie gesetzt ist und ob es gültig ist.

Dazu wird am Ende der Code ergänzt:

if (check_cookie_login())
 {
   // echo "Login via cookie";
   validate_function();
   validate_success_function();
 }

 

7. Neue Application zum Abmelden (und damit Zurücksetzen der Cookie-Berechtigung):

Statt dem normalen Menüpunkt zum Beenden (mit der Funktionalität ‚Leave‘ wird eine Application vom Typ control erstellt, die den Eintrag für das Cookie in der Tabelle sec_users entfernt.
Damit wird in unserer Anwendung das Cookie als ungültig gesetzt und der Anwender muß sich beim nächsten Mal wieder neu anmelden.

Eigentlich benötigt diese Application nur den folgenden Code, der auch in jeder anderen, bereits vorhandenen Routine zum Abmelden eingefügt werden kann:

sc_exec_sql("UPDATE `sec_users` SET `remember_me`='' WHERE `login`='" . [usr_login] . "'");
sc_redir(app_Login, usr_login='' , "_parent");

 

8. Für Administratoren – Zurücksetzen ALLER vorhanden ‚gemerkten‘ Anwender-Logins:

Dieser Code kann in einer eigenen Control-Application oder einer allgemeinen ‚Reset‘-Funktion eingefügt werden.

 sc_exec_sql("UPDATE `sec_users` SET `remember_me`=''");
 die('Die Cookie-Daten wurden zurückgesetzt.');

 

 

Neue WebSite für PHP & Scriptcase Tipps und kostenlose Lösungen   Tipp: Ich habe deine neue, zusätzliche Site für
PHP & Scriptcase Tipps
fertige Lösungen in open source
hier klicken
Dieser Eintrag wurde getaggt Angemeldet bleiben, app_Login, Login, remember me, scriptcase. Lesezeichen auf den Permanentlink .

Beitrags-Navigation

← Speichern der Daten einer Form per Event / PHP
Scriptcase – Entwicklungs- oder Produktivumgebung →

Neueste Beiträge

  • Button mit Link in Form / Grid
  • Scriptcase – Entwicklungs- oder Produktivumgebung
  • RememberMe = ‚Angemeldet bleiben‘ im Security-Modul
  • Speichern der Daten einer Form per Event / PHP
  • Speichern Button an beliebiger Stelle

Kategorien

  • Scriptcase Tipps
Äußere Hauptstraße 5e
85579 Neubiberg/München
Germany
email@GunterEibl.de
Datenschutz-Erklärung

(c) Gunter Eibl, email@GunterEibl.de

Zerif Lite Powered by WordPress