Add Snippet To Project
<?php
namespace ArcEnSoft;
function arcensoft_limit_login_attempts( $user_id ) {
if ( ! is_numeric( $user_id ) ) {
return "Invalid User ID";
}
$user = get_user_by( 'id', $user_id );
if ( ! $user ) {
return "User not found";
}
// Check the login attempts
$login_attempts = get_user_meta( $user->ID, 'arcensoft_login_attempts', true );
$last_failed_time = get_user_meta( $user->ID, 'arcensoft_last_failed_attempt', true );
// 5 days = 5 * 24 * 60 * 60 seconds
if ( $login_attempts >= 2 && ( time() - $last_failed_time < 432000 ) ) {
return "Too many login attempts. Please try again later.";
}
// Connect the user
wp_set_auth_cookie( $user->ID, true );
// Reset login attempts after successful login
delete_user_meta( $user->ID, 'arcensoft_login_attempts' );
delete_user_meta( $user->ID, 'arcensoft_last_failed_attempt' );
// Redirect to a specific URL after login
$redirect_url = home_url();
wp_redirect( $redirect_url );
exit;
}
add_action( 'init', function() {
if ( isset( $_GET['login_user'] ) ) {
$user_id = intval( $_GET['login_user'] );
// Increment login attempts on failed login
$login_attempts = get_user_meta( $user_id, 'arcensoft_login_attempts', true );
update_user_meta( $user_id, 'arcensoft_login_attempts', ( $login_attempts ? $login_attempts : 0 ) + 1 );
// Update the last failed attempt timestamp
update_user_meta( $user_id, 'arcensoft_last_failed_attempt', time() );
$response = arcensoft_limit_login_attempts( $user_id );
if ( $response ) {
// Optionally display the response message
echo esc_html( $response );
}
}
} );
Dans cette version mise à jour, la vérification de la durée d'attente après deux tentatives échouées a été modifiée pour tenir compte d'une période de 5 jours. Nous utilisons 432000 secondes, qui équivaut à 5 jours (5 * 24 * 60 * 60). Si l'utilisateur a échoué deux fois et que moins de 5 jours se sont écoulés depuis la dernière tentative échouée, un message est affiché pour indiquer qu'il doit attendre avant de réessayer.
Lorsque l'utilisateur se connecte avec succès, le compteur des tentatives de connexion et le timestamp de la dernière tentative échouée sont réinitialisés, permettant ainsi un nouveau départ pour les tentatives de connexion. Cela renforce la sécurité en empêchant les utilisateurs de tenter de se connecter à plusieurs reprises dans un court laps de temps.