web-dev-qa-db-fra.com

Comment personnaliser le processus de connexion

Je veux créer un nouveau moyen de connexion.

Ce que je dois faire maintenant:

  1. Éditez le formulaire utilisateur en ajoutant un nouveau champ qui est enregistré dans user_meta
  2. Modifiez le formulaire de connexion en ajoutant une nouvelle entrée.
  3. Construisez une requête (sécurisée) qui sélectionne le user_id dans la table usermeta;

Ce dont j'ai encore besoin:

  1. Attrapez le message pour vous connecter, lancez ma requête (3) et acceptez-le comme un utilisateur valide.

Je pourrais le faire si je pouvais écraser la fonction wp_signon, mais ce n’est pas possible.

Une autre alternative?

1
Falci

Vous pouvez utiliser cette fonction dans functions.php de votre thème actuel. Un champ supplémentaire apparaîtra sur le formulaire de connexion.

###################Code starts here ###################
<?php

add_action('login_form', 'add_login_field');
function add_login_field()
{
?>    
  <p>
      <label for="user_pass">My Input<br>
      <input type="text" name="my_name" value=""/>
  </p>
<?php  
}

function do_anything($user) {
    //do stuff

   $userdata= $user = get_userdatabylogin($user);
   $user_id = $userdata->ID;

   $my_name = $_POST['my_name'];



   add_user_meta( $user_id, 'my_name', $my_name);

}

add_action('wp_login', 'do_anything');
?>
############## CODE ENDS HERE ###################

Le code ci-dessus créera un champ supplémentaire sur le formulaire de connexion. Cette valeur sera affichée avec d'autres valeurs pouvant être reçues dans la fonction "do_anything($user)". Enfin, cette valeur peut être enregistrée en tant que méta utilisateur.

Partie 2 ====================================== ================================

add_action('login_form', 'add_login_field');
function add_login_field()
{

?>    
       <p>
  <label for="user_pass">My Input<br>
  <input type="text" name="my_name" value=""/>
 </p>


 <?     
    }

function do_anything($user) {

    //do stuff

   $userdata= $user = get_userdatabylogin($user);
   $user_id = $userdata->ID;

   $my_name = $_POST['my_name'];


add_user_meta( $user_id, 'my_name', $my_name);
}
add_action('wp_login', 'do_anything');


add_filter('authenticate', 'check_login', 10, 3);

function check_login($user, $username, $password) {
  global $wpdb;  
if(isset($_POST['my_name']) && trim($_POST['my_name'])!="")
{
    $customfield    =   $_POST['my_name'];
$UsermetaData = $wpdb->get_results("SELECT *FROM  wp_usermeta WHERE meta_value='$customfield'");
$user = get_user_by('id', $UsermetaData[0]->user_id );

// Redirect URL //

if ( !is_wp_error( $user ) )
{
    wp_clear_auth_cookie();
    wp_set_current_user ( $user->ID );
    wp_set_auth_cookie  ( $user->ID );

    $redirect_to = user_admin_url();
    wp_safe_redirect( $redirect_to );
    exit();
}
return $user;
}

}

Veuillez vérifier cet extrait de code. Aussi, vous devez modifier le code selon les exigences. Assurez-vous que le champ "mon_nom" reste unique et qu'il ne sera pas mis à jour à chaque connexion.

1
TBI Infotech

Si vous voulez intercepter l'entrée avant la fin de la connexion, je pense que vous pourriez simplement accrocher l'action wp_authenticate et y exécuter votre script.

"Cette action est située dans wp_signon. Contrairement à l'action wp_login, elle est exécutée avant le processus d'authentification WordPress."

0
Stephen R