Trick # 619 | Dieser Beitrag beinhaltet 0 Wörter. – Geschätzte Lesezeit: ca. 0 Minuten.
Heute eine besonders praktische WordPress-Funktion: wir erstellen einen temporären Login-Link. Solche Links ermöglichen es einem User, sich einmalig und ohne Benutzername und Passwort anzumelden – ideal für Supportzugänge, Testbenutzer oder andere spezielle Anwendungsfälle. Diese Links sind sicher, zeitlich begrenzt und einfach zu verwenden. In diesem Beitrag zeigen wir Ihnen wie simpel und praktisch das geht.
Es gibt viele Gründe, warum temporäre Login-Links nützlich sein können. Erstens ermöglichen sie Administratoren, direkten Zugriff auf ein Benutzerkonto zu erhalten, um ein Problem zu analysieren. Zweitens sind zeitlich begrenzte Zugänge ideal, um externen Partnern oder Testnutzern kurzfristigen Zugriff zu geben. Drittens fällt der Austausch von Passwörter aus.
Der hier vorgestellte Ansatz sorgt dafür, dass die Sicherheit gewahrt bleibt: Das Login ist nur ein einziges mal möglich und die Links werden nach zehn Stunden automatisch ungültig.
Kopieren Sie nun den folgenden Code und legen Sie ihn in der Datei functions.php Ihrer WordPress-Installation ab. Diesee Datei können Sie im Backend unter Design/Theme-Datei-Editor bearbeiten:
// Widget erstellen, um temporäre Login-Links zu generieren (nur für Administratoren)
add_action('wp_dashboard_setup', function() {
if (current_user_can('administrator')) { // Überprüfung auf Administratorrechte
wp_add_dashboard_widget(
'temporary_login_widget',
'Temporäre Login-Links',
'render_temporary_login_widget'
);
}
});function render_temporary_login_widget() {
if (isset($_POST['generate_login_link'])) {
$role = sanitize_text_field($_POST['role']);
$users = get_users(array('role' => $role));
$links = array();foreach ($users as $user) {
$links[] = generate_auto_login_link($user->ID);
}echo '<p><strong>Temporärer Login-Link:</strong></p>';
foreach ($links as $link) {
echo '<p><input type="text" value="' . esc_url($link) . '" readonly onclick="this.select();" class="temp-link-input"> <button class="copy-link-button" data-link="' . esc_url($link) . '">Kopieren</button></p>';
}
echo '<p id="copy-success" style="display:none; color:green;">Link kopiert!</p>';
echo '<script>
document.addEventListener("DOMContentLoaded", function() {
document.querySelectorAll(".copy-link-button").forEach(function(button) {
button.addEventListener("click", function() {
const link = button.getAttribute("data-link");
navigator.clipboard.writeText(link).then(function() {
const successMessage = document.getElementById("copy-success");
successMessage.style.display = "block";
setTimeout(() => { successMessage.style.display = "none"; }, 5000);
});
});
});
});
</script>';
}// Formular zur Rollenwahl
echo '<form method="post">';
echo '<p><label for="role">Rolle auswählen:</label></p>';
echo '<select name="role" id="role">';global $wp_roles;
foreach ($wp_roles->roles as $role => $details) {
echo '<option value="' . esc_attr($role) . '">' . esc_html($details['name']) . '</option>';
}echo '</select>';
echo '<p><button type="submit" name="generate_login_link">Login-Links generieren</button></p>';
echo '</form>';
}function generate_auto_login_link($user_id) {
$token = bin2hex(random_bytes(16)); // Einzigartigen Token generieren
$expiration = time() + 10 * 60 * 60; // Ablaufzeit: 10 Stundenupdate_user_meta($user_id, 'auto_login_token', $token);
update_user_meta($user_id, 'auto_login_expiration', $expiration);return home_url('/?auto_login=' . $token);
}// Auto-Login-Mechanismus
add_action('init', function() {
if (isset($_GET['auto_login'])) {
$token = sanitize_text_field($_GET['auto_login']);
$users = get_users(array(
'meta_key' => 'auto_login_token',
'meta_value' => $token,
));if (!empty($users)) {
$user = $users[0];
$expiration = get_user_meta($user->ID, 'auto_login_expiration', true);if (time() > $expiration) {
wp_die('Dieser Login-Link ist abgelaufen.');
}wp_set_auth_cookie($user->ID, true);
delete_user_meta($user->ID, 'auto_login_token');
delete_user_meta($user->ID, 'auto_login_expiration');wp_redirect(admin_url()); // Weiterleitung ins Dashboard
exit;
}
}
});
Dem WordPress-Dashboard wird damit ein Widget hinzugefügt, sofern sich ein Administrator einloggt. Für jeden Link wird ein einzigartiger Token erstellt, der zusammen mit einer Ablaufzeit gespeichert wird. Wenn der Link aufgerufen wird, überprüft WordPress die Gültigkeit des Tokens und der Ablaufzeit. Ist alles korrekt, wird der Benutzer eingeloggt und der Token sofort gelöscht. Die zeitliche Begrenzung sorgt zudem dafür, dass Links nach Ablauf nicht missbraucht werden können.
Diese Links sind für einen einzigen Aufruf geeignet. Ausserdem wird mit obigem Code festgelegt, dass Links – auch wenn sie nicht genutzt werden – nach zehn Stunden ungültig werden. Diese zeitliche Begrenzung geschieht in Zeile 58, die Sie natürlich nach Ihren Bedürfnissen anpassen können.
Werbung


