Aktivierungslink per mail

Eiszwerg

Erfahrenes Mitglied
Moin moin,
ich habe ein Tagebuch-System gecodet und möchte nun sinnlose Anmeldungen verhindern.
Dazu möchte ich gerne die Version mit dem Aktivierungslink per mail verwenden. Wie mache ich das am Klügsten?
Hat da eine/r von Euch Erfahrung mit?
Am schönste wäre ein Vorschlag, in dem ich möglichst wenig im jetzigen Code ändern müsste (eine externe Tabelle oder sowas)...

Bin auf Eure Ideen gespannt!
 
ujjj dazu müßten wir etwas mehr wissen!

eine möglichkeit wäre.(vorrausetzung: Du arbeitest mit verschiedenen Benutzerrechten)

bei der anmeldung wird ein hashcode (z.B von der Email) in der tabelle anstatt des benutzerrechtes gespeichert und eine email mit einem link verschickt. im dem link ist auch der hash als parameter.
und auf dieser seite wird dann der hashüberprüft und die rechte in der datenbank verändert.

Damit üperprüfst Du aber nur ob es eine reale Emailadresse ist

oder willst Du das Du (bzw. der Admin) den Aktivierungslink bekommst
 
Nein, Deine Auffassung des Problems ist schon richtig so... Der Nutzer soll quasi den Zugang nur nutzen können, wenn er eine echte e-mail-adresse angegeben hat. Denn nur dann kann er ja den Link nutzen.
Zur Info: ich arbeite nicht mit Benutzer-Rechten
Man loggt sich per Name und PW ein...

http://www. mein-diary. de. vu
 
Aallllso....du generierst, wie boelkstoff gesagt hat eine Spalte in der Tabelle, in der Benutzerrechte verzeichnet sind...fallst du sowas nicht brauchst, erstelle einfach eine Spalte wie
aktiviert char(5)
Dann schickst du dem User an seine angegebene Emailadresse einen Link, der entweder eine Zufallszahl enthält, diese Zufallszahl wird auch in der Datenbank unter "aktiviert" gespeichert.
Dann klickt der User den link...sowas wie http://www.deineseite.de/aktivieren.php?code=12345
Wenn der Code mit dem in der Datenbank übereinstimmt, wird das Feld auf Ja oder 1 oder irgendetwas gesetzt, mit dem aktivierte User identifiziert werden.
Was auch gut ankommt, ist , wenn man keine Lust hat, einen Zufallsalgorythmus zu bauen, einfach einen md5 des usernamens zu senden...solange niemand dahinterkommt funktioniert das genauso gut und geht schneller.
 
Beispiel:

Tabelle:
UserName VARCHAR(30)
Passwort BARCHAR(32)
Aktiviert ENUM('N','Y') DEFAULT 'N'
Code VARCHAR(5)

Neuen Benutzer anlegen:
PHP:
# Code generieren:
srand ((double)microtime()*1000000);
while(strlen($c) < 5)
{
 $c .= rand(0,9);
}

# Zur Datenbank verbinden:
$mysqlverb = @mysql_connect($db_host, $db_user, $db_pass);

# In Datenbank speichern:
$sql = "INSERT INTO users (UserName, Passwort, Code, Aktiviert)
VALUES ('".$username."', '".md5($passwort)."', '".$c."', 'N')";

#SQL ausführen...
mysql_db_query($db_name, $sql, $mysqlverb);

# E-Mail verschicken:
$msg = "Hallo ".$username;
$msg .= "\nVielen Dank für Ihre Registrierung.\n";
$msg .= "Bitte aktivieren Sie ihren Account:\n";
$msg .= "http://meine-domain.de/aktivieren.php?user=".$username."&code=".$c."\n";
$msg .= "Erst nach einer Aktivierung können Sie Ihren Account nutzen.";
mail($email, "Account aktivieren", $msg);

Aktivieren:
PHP:
# Zur Datenbank verbinden:
$mysqlverb = @mysql_connect($db_host, $db_user, $db_pass);

$sql = "UPDATE users SET Aktiviert='Y' WHERE UserName='".$user."' ANDCode='".$code."'";

# SQL ausführen
mysql_db_query($db_name, $sql, $mysqlverb);

#Anzahl betroffener Datensätze ausgeben:
if (mysql_affected_rows() < 1)
{
 echo "Account nicht aktiviert\nKombination aus Benutzer und Code ist nicht vorhanden.";
}
else
{
 echo "Account aktiviert!";
}

Script nicht getestet.
Keine Garantie auf Funktionalität...
 
Genauso dachte ich mir das...
Vielen Dank für die Anregungen...
Bin shcon fleissig dabei *g* Muss heute pausieren, weil Mum Birthday feiert ;o)
 
noch ein kleines problemchen :(

hi,
erst mal gut das du dieses script gepostet hast.
nun habe ich das eingebaut und das aktivieren usw klappt auch nur der server sendet keine email.
es kommt dieser fehler :
Warning: mail(): SMTP server response: 550 5.7.1 Unable to relay for email@mailde in c:\www\xxx\admin\create.php on line 94
das steht das hier ja :

mail($email, "Account aktivieren", $msg);

könnt ihr mir sagen wodran das liegt?

daniel :(
 
Auf deinem lokalen Windows Server ist kein Sendmail o.ä. installiert. Das brauchst du aber um Mails mit php zu verschicken. Wenn du das Skript ins Netz hochlädst wird es dann funktionieren, da auf einem Linux Server eigentlich immer Sendmail installiert ist.

Solange du es Lokal testest würde ich die stelle einfach auskommentieren
 
mmh

also das ist im internet.
den smtp server habe ich ich in den diensten eingefügt.
der müsste eigentlich laufen.
sendmail_from me@localhost.com
sendmail_path no value
serialize_precision 100
short_open_tag On
SMTP localhost
smtp_port 25

muss ich d den path eintragen zu dem server?
danke...

daniel
 
Bist du dir sicher dass der Dienst auch automatisch gestartet wird?

Ansonsten solltest du in deiner php.ini nachschauen was dort unter [mail function] eingetragen ist.

Der Eintrag sollte so aussehen:

[mail function]
SMTP = localhost

Da fällt mir noch ein: kann es sein dass es einfach nur ne Fehlermeldung ist weil er die eMail Adresse email@mailde einfach keine gültige Domain hat?

Edit: es liegt wohl am SMTP Dienst, schau mal hier
 
Zurück