web-dev-qa-db-fra.com

Comment obtenir user-meta auprès des utilisateurs inscrits à Social Login?

Il semble que les plugins de connexion sociale (tels que Wordpress Social Login, OneAll, etc.) ne créent pas d'utilisateurs dans la base de données wp d'origine sous la forme d'un enregistrement régulier à partir du tableau de bord Admin. Il n’est donc pas possible d’ajouter ou d’obtenir des métadonnées de l’utilisateur actuel de la manière "normale".

La question est: Comment obtenir user-meta de la part des utilisateurs enregistrés de Social Login?

J'ai un cas en cours et je n'ai pas encore trouvé de réponse. J'espère que vous pourrez m'aider.

Le cas Dans ce cas, nous avons un Gravityform qui permet aux utilisateurs enregistrés de soumettre une nouvelle page. Nous voulons qu'ils soumettent une seule page par utilisateur. Le titre de la page est créé automatiquement et son ID-entrée de formulaire est un élément unique du titre de la page (paramètres Gravityforms). Cette fonction ci-dessous permet à Gravityforms de créer une page au lieu d’un message:

add_filter("gform_post_data", "change_post_type", 10, 2);
function change_post_type($post_data, $form){
    //only change post type on form id 1
    if($form["id"] != 2)
       return $post_data;

    $post_data["post_type"] = "page";
    return $post_data;
}

Nous voulons maintenant que les utilisateurs qui ont rempli le formulaire avec succès et sont actuellement connectés, affichent l'URL de leur page créée, telle que www.example.com/pagenumber{entry-ID}. Par conséquent, il y a 3 options à afficher:

  1. l'utilisateur est connecté et a créé une page -> afficher l'URL de la page
  2. l'utilisateur est connecté et n'a pas encore créé de page -> afficher le formulaire -> rediriger vers le point 1 après avoir terminé
  3. l'utilisateur n'est pas connecté -> afficher les boutons de connexion sociale -> rediriger vers le point 2 après la connexion

Premièrement, nous devons ajouter l'ID d'entrée de formulaire à la méta utilisateur:

add_action( 'gform_after_submission', 'wpse96480_map_user_to_page', 10, 2);

    function wpse96480_map_user_page( $entry, $form ) {
        $user_id = $entry['created_by'];
        $meta_key = 'generated_page_id';
        $meta_value = $entry['post_id'];
        $unique = true;
        add_user_meta( $user_id, $meta_key, $meta_value, $unique );
    }

Maintenant, nous ajoutons le code ci-dessous au page.php (ou fichier de modèle de page) pour vérifier si l'utilisateur actuel est connecté et avoir un ID d'entrée dans le méta utilisateur, et si c'est le cas, pour afficher l'URL avec l'identificateur d'entrée:

<?php
    if ( is_user_logged_in() ) {
        global $current_user;
        // $current_user = get_currentuserinfo();
        $user_id = $current_user->ID;
        $meta_key = 'gform_entry_id';
        $single = true;
        $entry_id = get_user_meta( $user_id, $meta_key, $single );
        if( strlen( $entry_id ) > 0 && is_numeric( $entry_id ) ) {
            // we have an entry ID now
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, thank you for submitting the form. Visit your page here: www.example.com/pagenumber<?php echo( $entry_id ); ?></h2>
            <?php
        } else {
            // we don't have an entry ID for this user
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, Thank you for joining. To create a page please submit the form below:</h2><?php echo do_shortcode('[gravityform id="2" name="just a form" title="false" description="false"]'); ?>
            <?php
        }
    } else {
        // user is not logged in
        ?>
        <h2><Please log in to create a page <?php do_action( 'wordpress_social_login' ); ?></h2>
        <?php
    }
?>

Résultat: Si un utilisateur WP enregistré régulier (créé par l'administrateur dans le tableau de bord de l'administrateur) est connecté et complète le formulaire avec succès, l'option (1) est effective/réussie et s'affiche en tant que nous voulions. Si l'utilisateur n'a pas encore rempli le formulaire, l'option (2) est effective/réussie.

Le problème avec les utilisateurs de Social Login: Si un utilisateur enregistré via un plug-in de connexion sociale est connecté et a rempli le formulaire avec succès, l'option (2) s'affiche toujours comme si l'utilisateur n'avait jamais rempli le formulaire.

Question: Comment obtenir user-meta de la part des utilisateurs enregistrés sur Social Login? **

2
tobe

Vous ne spécifiez pas le plugin que vous utilisez. Mais si un utilisateur se connecte avec un OAuth (utilisé par les plates-formes sociales les plus populaires), il ne peut pas être connecté à WordPress.

Pourquoi?

Un utilisateur a besoin d'un nom d'utilisateur et password pour se connecter. OAuth (et d'autres méthodes) ne fournissent pas de mot de passe. Ils ne répondent qu'avec Oui, cet utilisateur est autorisé ou Non, non autorisé .

Les plugins de connexion sociale ont besoin d’une méthode pour réidentifier l’utilisateur s’il demande une nouvelle page du blog. Ils doivent stocker quelque chose qui leur dit Cet utilisateur est connecté . WordPress utilise un cookie. Une autre méthode consiste à démarrer une session. Une méthode un peu exotique pourrait utiliser la base de données et l'adresse IP. Je ne sais pas comment votre plug-in de connexion sociale réidentifie l'utilisateur, mais c'est un point important pour savoir pourquoi votre formulaire ne fonctionne pas.

Pourquoi l'utilisateur n'est plus connecté?

Je suppose que le plugin perd la connexion à la méthode de ré-identification. Signifie, ne peut pas lire le cookie ou la session est arrêtée/détruite.

Solution possible

Lors de l'affichage du formulaire et si l'utilisateur est connecté avec un identifiant social, enregistrez un nouvel utilisateur dans WordPress et connectez-le à cet utilisateur. Cela peut être un utilisateur factice et ne nécessite pas de nom d'utilisateur réel. Vérifiez si l'utilisateur actuel est connecté avec un identifiant de connexion sociale, récupérez les données utilisateur (par exemple, nom d'utilisateur), créez un hachage à partir de ces données utilisateur, utilisez-le comme nom d'utilisateur et mot de passe. La prochaine fois que l'utilisateur se connectera à l'aide de la connexion sociale, participez à ce processus, récupérez les données utilisateur, créez un hachage et vérifiez si un utilisateur possédant ce hachage existe.

Vous pouvez également essayer de savoir comment le login social réidentifie l'utilisateur et pourquoi il n'est pas réidentifié après la fin du formulaire.

1
Ralf912