prepare( 'SELECT id, user_id FROM password_reset_tokens WHERE token_hash = :token_hash AND used_at IS NULL AND expires_at > NOW() LIMIT 1' ); $check->execute(['token_hash' => hash('sha256', $token)]); $validToken = is_array($check->fetch()); } catch (Throwable $exception) { error_log('PnPaaS password reset validation error: ' . $exception->getMessage()); $error = 'Der Zurücksetzungslink ist derzeit nicht verfügbar.'; } } if ($_SERVER['REQUEST_METHOD'] === 'POST' && $error === null) { $password = (string)($_POST['password'] ?? ''); $passwordConfirmation = (string)($_POST['password_confirmation'] ?? ''); if (!pnpaas_valid_csrf((string)($_POST['csrf_token'] ?? ''))) { $error = 'Die Sitzung ist abgelaufen. Bitte öffnen Sie den Link erneut.'; } elseif (!$validToken) { $error = 'Der Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.'; } elseif (strlen($password) < 12) { $error = 'Das Passwort muss mindestens 12 Zeichen lang sein.'; } elseif ($password !== $passwordConfirmation) { $error = 'Die Passwörter stimmen nicht überein.'; } else { try { $db = pnpaas_db(); $db->beginTransaction(); $find = $db->prepare( 'SELECT id, user_id FROM password_reset_tokens WHERE token_hash = :token_hash AND used_at IS NULL AND expires_at > NOW() FOR UPDATE' ); $find->execute(['token_hash' => hash('sha256', $token)]); $reset = $find->fetch(); if (!is_array($reset)) { $db->rollBack(); $validToken = false; $error = 'Der Link ist ungültig oder abgelaufen. Bitte fordern Sie einen neuen Link an.'; } else { $update = $db->prepare('UPDATE users SET password_hash = :password_hash WHERE id = :user_id AND status = :status'); $update->execute([ 'password_hash' => password_hash($password, PASSWORD_DEFAULT), 'user_id' => (int)$reset['user_id'], 'status' => 'active', ]); $used = $db->prepare('UPDATE password_reset_tokens SET used_at = NOW() WHERE user_id = :user_id'); $used->execute(['user_id' => (int)$reset['user_id']]); $db->commit(); $success = 'Ihr Passwort wurde geändert. Sie können sich jetzt anmelden.'; $validToken = false; } } catch (Throwable $exception) { if (isset($db) && $db instanceof PDO && $db->inTransaction()) { $db->rollBack(); } error_log('PnPaaS password reset update error: ' . $exception->getMessage()); $error = 'Das Passwort konnte nicht geändert werden. Bitte versuchen Sie es erneut.'; } } } ?> PnPaaS – Neues Passwort

PnPaaS Administration

Neues Passwort

Vergeben Sie ein neues Passwort für Ihr Konto.