Force users to change password after some time
-
Hello to all! I am trying to create one functionality that forces the users to change their password after sometime, let’s say, 60 days, for example. I have made a modification to make this expiration happens in 5 minutes for test purposes, but i cant make it work. What am I doing wrong? thanks in advance.
/** * Desconectar o usuário e forçar a troca de senha a cada 5 minutos (apenas para fins de teste). */ // Define o número de segundos para a expiração da senha (5 minutos = 5 * 60) define( 'PASSWORD_EXPIRY_SECONDS', 5 * 60 ); // Verifica se a senha expirou antes de permitir o login function password_expiry_check_password( $user, $password ) { if ( empty( $user ) ) { return $user; } $user_id = $user->ID; $last_password_update = get_user_meta( $user_id, 'password_last_updated', true ); if ( $last_password_update ) { $expiry_time = strtotime( '+' . PASSWORD_EXPIRY_SECONDS . ' seconds', strtotime( $last_password_update ) ); if ( time() > $expiry_time && $password !== '' ) { $user->set_role( 'expired_password' ); wp_logout(); $login_url = wp_login_url(); $change_password_url = home_url( '/trocar-senha' ); wp_safe_redirect( $change_password_url ); exit; } } return $user; } add_filter( 'authenticate', 'password_expiry_check_password', 30, 2 ); // Exibe um aviso na página de login para usuários com senha expirada function password_expiry_login_message() { if ( isset( $_GET['password-expired'] ) && $_GET['password-expired'] === 'true' ) { echo '<div class="notice notice-warning"><p>Sua senha expirou. Por favor, troque sua senha.</p></div>'; } } add_action( 'login_message', 'password_expiry_login_message' ); // Atualiza a data da última troca de senha sempre que o usuário altera sua senha function password_expiry_update_last_updated( $user_id, $new_pass ) { update_user_meta( $user_id, 'password_last_updated', date( 'Y-m-d H:i:s' ) ); } add_action( 'password_reset', 'password_expiry_update_last_updated', 10, 2 ); add_action( 'user_profile_update_errors', 'password_expiry_update_last_updated', 10, 3 ); // Verifica se a nova senha é diferente da anterior function password_expiry_check_password_change( $errors, $user, $new_pass ) { if ( ! empty( $user ) && $new_pass !== '' ) { $user_id = $user->ID; $last_password = get_user_meta( $user_id, 'password_last', true ); if ( ! empty( $last_password ) && $new_pass === $last_password ) { $errors->add( 'password_change_error', 'A nova senha deve ser diferente da anterior.' ); } } return $errors; } add_filter( 'user_profile_update_errors', 'password_expiry_check_password_change', 10, 3 ); add_filter( 'validate_password_reset', 'password_expiry_check_password_change', 10, 3 );
Viewing 5 replies - 1 through 5 (of 5 total)
Viewing 5 replies - 1 through 5 (of 5 total)
The topic ‘Force users to change password after some time’ is closed to new replies.