• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Log-In-Script modifizieren (Freischaltung der Registrierung)

dbarthel

Lounge-Member
HOW-TO: PHP-Log-In-Script modifizieren (Freischaltung der Registrierung)

Hallo, liebe Freunde, ich brauch mal eure Hilfe.

Da ich mich mit PHP nicht auskenne, habe ich für eine meiner Seiten als Log-In-Script, das hier ausgesucht: The PHP-LOGIN project
(Framework: https://github.com/panique/php-login-advanced)

Nun müsste ich das aber wie folgt anpassen:

1. nach der Registrierung, soll das Benutzerkonto zwar angelegt, aber nicht automatisch freigeschalten werden.
Stattdessen soll der Admin eine Benachrichtigung/Email bekommen und das Benutzerkonto dann freischalten.

2. nach erfolgreichem LogIn, soll zusätzlich via localStorage bzw, falls dieser nicht unterstütz wird, via Coockie ein bestimmter Wert (wird an anderer Stelle benötigt) gespeichert werden.


Da ich mich jedoch, wie bereits erwähnt, mit PHP nicht wirklich auskenne, weiß ich nicht, wie und wo ich was anpassen muss, damit dies entsprechend funktioniert.

Deshalb möchte ich euch bitten, mir zu helfen und zu zeigen, wie und wo ich was, wie anpassen muss, damit dies entsprechend funktioniert.

Vielen Dank im Voraus.
 
Zuletzt bearbeitet:
Du musst in der Datenbanktabelle eine zusätzliche Spalte erstellen, die beim Login geprüft wird. Dort trägst du ein, ob der Benutzer schon aktiviert wurde oder noch nicht.
Ich habe dir hier mal noch ein altes Skript als Anregung dazu rausgekramt, die unrelevanten Code-Abschnitte habe ich so gut es ging entfernt.
PHP:
<?php

header("Content-type: text/html; charset=UTF-8");
header("X-Frame-Options: SAMEORIGIN");

//SQL einbinden zum Zugriff auf Datenbank
function db_connect($db_type, $db_host, $db_user, $db_password, $db_name){
	$server = $db_type.":dbname=".$db_name.";host=". $db_host.";charset=utf8";
	$options =array(
		PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
	);

	try{
		$pdo = new PDO($server, $db_user, $db_password, $options);
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		return $pdo;
   }
}

$db_type = "mysql";
$db_host = "mysql.localhost";
$db_user = "root";
$db_password = "********";
$db_name = "users";
$db_table = "registration";

$pdo = db_connect($db_type, $db_host, $db_user, $db_password, $db_name);


//...


if($registration_ok === true){
	//Zeit auslesen und Registrierungslink für 24h gültig machen
	$timestamp = time();
	$valid_until = $timestamp + (60*60*24);

	require("./generate_strings.inc.php");
	$registration_id = generate_ID($valid_until, $username);

	$query = "INSERT INTO ".$db_table." (email, username, password, active, registration_id, registration_until) VALUES (:email, :username, :passsword, :active, :registration_id, :registration_until)";
	$mysql = $pdo->prepare($query);
	$mysql = $mysql->execute(array(
		':email' => $user_email,
		':username' => $user_name,
		':password' => $user_password,
		':active' => 0,
		':registration_id' => $registration_id,
		':registration_until' => $valid_until,
	));

	if($mysql === true){
		$registration_date = date("d.m.Y", $timestamp);
		$registration_time = date("H:i", $timestamp);
		
		$path = $_SERVER["HTTP_SCHEME"]."://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?confirm&id=".$registration_id;
 
     
		//Mail mit Registrierungslink versenden
		$sender = "registration@example.com <registration@example.com";
		$recipient = "admin@example.com";

		$subject = "Ein neuer Benutzer hat sich registriert";
		$text = "Ein neuer Nutzer hat sich registriert: ".$user_name." (".$user_email.")\nBitte bestätigen Sie diese Registrierung mit folgendem Link: ".$registration_link."\nRegistriert: ".$registration_date." um ".$registration_time." Uhr";

		$subject = "=?utf-8?b?".base64_encode($subject)."?=";
		$text = quoted_printable_encode($text); 
		$headers = "From: ".$sender."\r\n";
		$headers .= "Reply-To: ".$sender."\r\n";
		$headers .= "MIME-Version: 1.0\r\n";
		$headers .= "X-Priority: 3\r\n";
		$headers .= "X-Mailer: PHP/".phpversion()."\r\n";
		$headers .= "X-Sender-IP: $REMOTE_ADDR\r\n";
		$headers .= "Content-Type: text/plain; charset=utf-8\r\n";
		$headers .= "Content-Transfer-Encoding: quoted-printable";
		mail($recipient, $subject, $text, $headers);
	}

}


//...


if(isset($_GET['confirm']) && isset($_GET['id'])){
	$id = $_GET['id'];
	$query = "SELECT username FROM ".$db_table." WHERE registration_id = :registration_id";
	$mysql = $pdo->prepare($query);
	$mysql->execute(array(
		':registration_id' => $id
	));
	
	$num_rows = $mysql->rowCount();
	if($num_rows === 1){
		$user_name = $mysql->fetch();
		$query = "UPDATE ".$db_table." SET active = 1 WHERE registration_id = :registration_id";
		$mysql->execute(array(
			':registration_id' => $id
		));
		if($mysql === true){
			$success = true;
		}
	}
	
	if($success === true){
		echo "Das Benutzerkonto ".$user_name." wurde erfolgreich freigeschaltet.";
	}
	else{
		echo "Es ist ein Fehler aufgetreten!";
	}
}

$pdo = null;
?>
 
Moment, ich hab gerade nochmal hier nachgesehen: https://github.com/panique/php-login-advanced/blob/master/_installation/02-create-user-table.sql#L6
Es scheint schon so, als würde der Benutzer zuerst noch nicht aktiv geschaltet werden.

Das bedeutet, du musst nur die Zeile 152 in classes/Registration.php verändern in
PHP:
if ($this->sendVerificationEmail($user_id, "admin@example.com", $user_activation_hash)) {
, damit du statt des jeweiligen Users die E-Mail zum Freischalten erhältst...

- - - Aktualisiert - - -

Ich habe mir jetzt mal das ganze Skript noch genauer angeschaut und bereue es mittlerweile, mir die Arbeit gemacht zu haben, selbst ein komplettes Login-/Registrierungssystem geschrieben zu haben - das ist nämlich vom Prinzip her sehr ähnlich zu dem, beispielsweise benutze ich fast die gleichen Spalten in der Datenbank... :p
 
Moment, ich hab gerade nochmal hier nachgesehen: https://github.com/panique/php-login-advanced/blob/master/_installation/02-create-user-table.sql#L6
Es scheint schon so, als würde der Benutzer zuerst noch nicht aktiv geschaltet werden.

Das bedeutet, du musst nur die Zeile 152 in classes/Registration.php verändern in
PHP:
if ($this->sendVerificationEmail($user_id, "admin@example.com", $user_activation_hash)) {
, damit du statt des jeweiligen Users die E-Mail zum Freischalten erhältst...

Klingt etwas leichter.
Aber wie könnte ich jetzt auch meinen zweiten Wunsch (speichern eines coockies/localStorage nach erfolgreichem Login, noch erfüllt bekommen?
 
Aber wie könnte ich jetzt auch meinen zweiten Wunsch (speichern eines coockies/localStorage nach erfolgreichem Login, noch erfüllt bekommen?
Da muss ich mich mal noch durch einige Codezeilen wühlen... Soweit ich es jetzt verstanden habe, wird ohnehin ein Cookie nach dem Login gesetzt...
 
Frage: warum soll der Admin einen Account freischalten?

Ich persönlich finde sowas störend. Besser wäre es, dem User eine Email mit einem Aktivierungslink zu senden, so weiß man wenigstens, dass hinter der existierenden Emailadresse ein User ist der das auch wirklich will.
 
Frage: warum soll der Admin einen Account freischalten?
Weil wir nicht jede Registrierung akzeptieren wollen.

@Julian:
So richtig scheint das mit der Mail aber noch nicht zu funktionieren.
Habe mich mal selber registriert. Bekommen eine Mail, aber muss da ja jetzt nichts machen. Wo schalte ich mich denn nun frei? Oder geht das doch von alleine (was es so nicht soll).

Hmm seltsam.
 
Zu deiner Frage zwecks Cookie beim Login setzen: Das kannst du nach der Zeile 314 (classes/Login.php):
PHP:
$name = "Testcookie";
$value = "irgendein Inhalt";

$min_valid = 120; //Cookie verfällt nach 120 Minuten
$expires = time() + 60*$min_valid;

setcookie($name, $value, $expires, "/", $_SERVER["HTTP_HOST"])

- - - Aktualisiert - - -

Geht es darum, in dem Cookie nur zu speichern, ob der User angemeldet ist?
Wenn ja, dann kannst du auch die Zeilen 308-313 in
PHP:
$this->deleteRememberMeCookie();
$this->newRememberMeCookie();
ändern, also den if-Zweig komplett löschen. So wird immer ein Cookie gesetzt, auch wenn nicht die "Remember me"-Option gewählt wurde...
 
Es sollte zusätzlich ob der User angemeldet ist noch was anderes gespeichert werden.
 
Zuletzt bearbeitet:
So richtig scheint das mit der Mail aber noch nicht zu funktionieren.
Habe mich mal selber registriert. Bekommen eine Mail, aber muss da ja jetzt nichts machen. Wo schalte ich mich denn nun frei? Oder geht das doch von alleine (was es so nicht soll).
Ich habe es nicht getestet, aber eigentlich sollte man da schon sich per Link freischalten müssen. Schau dir mal hier den Abschnitt ab Z. 206 an...

- - - Aktualisiert - - -

Es sollte zusätzlich ob der User angemeldet ist noch was anderes gespeichert werden.
Ok, dann verwende die erstgenannte Option von mir. Also den zusätzlichen Abschnitt einfügen und den Namen und Inhalt des Cookies definieren.
 
Entschuldigung für die eventuell dumme Frage, aber ich bin in Sachen PHP und MySQL echt Laie.

Kann man als Administrator im Nachhinein auf die bei der Registrierung angebenrn Daten des Users der sich registriert hat zugreifen?
Wenn ja, wo und wie?
 
Entschuldigung für die eventuell dumme Frage, aber ich bin in Sachen PHP und MySQL echt Laie.
Kann man als Administrator im Nachhinein auf die bei der Registrierung angebenrn Daten des Users der sich registriert hat zugreifen?
Wenn ja, wo und wie?
Es gibt (so gut wie) keine dummen Fragen :)

Ja, kann man. Und zwar indem man sich in PHPMyAdmin anmeldet und die betreffende Datenbank und Tabelle wählt. Dort sieht man dann die gespeicherten Daten.
Redest du von einem lokalen oder gehosteten Server (wenn ja, wo gehostet?)?
 
Die Projekt-Website wird mit allem was dazu gehört, wohl bei Limacity gehostet werden, da für das Projekt kein Webspace gekauft werden kann.
 
Danke dir. :)

Ich betreibe das Projekt nur in meiner Freizeit, zusammen mit einigen freiwilligen Studenten, daher dee FreeSpace.
Ist ein gemeinnütziges, soziokulturelles Projekt, was absolut unabhängig von der Arbeit, der Uni oder irgendeiner Institution oder Einrichtung ist.
 
Ich betreibe das Projekt nur in meiner Freizeit, zusammen mit einigen freiwilligen Studenten, daher dee FreeSpace.
Ist ein gemeinnütziges, soziokulturelles Projekt, was absolut unabhängig von der Arbeit, der Uni oder irgendeiner Institution oder Einrichtung ist.
Klar, brauchst dich ja nicht rechtfertigen dafür; um Gottes Willen... ;)
Gern geschehen!
 
AW: PHP-Log-In-Script modifizieren (Freischaltung der Registrierung)


Noch nicht.

Will noch fragen, ob man die Freischaltung aufteilen könnte.

Soll heißen, zunächst bekommt der User der sich registriert hat eine Mail mit Bestatigungslink.
Klickt er den wird das Konto aber noch nicht freigeschaltet, sondern der User sieht eine Meldung "Fasst geschafft, ihr Konto muss nur noch freigegeben werden. " und der Administrator erhält eine Mail, mit der er dann das Konto abschließend freischaltet (oder eben nicht)

Wie und wo müsste das Script angepasst werden, um sowas zu bewerkstelligen?
 
Zurück
Oben