web-dev-qa-db-fra.com

Connexion personnalisée à Facebook, problème de connexion/déconnexion

Je travaille sur une fonction personnalisée pour la connexion de mes utilisateurs via Facebook.

J'ai commencé par lire ce didacticiel de Nice sur la connexion via Facebook: http://digitalzoomstudio.net/2013/02/09/tutorial-how-to-login-via-facebook-in-your-wordpress-blog/

La fonction connectera l'utilisateur à wordpress si un compte avec son email facebook existe déjà dans le blog wordpress. S'il n'existe pas, il créera automatiquement un compte pour l'utilisateur.

Tout fonctionne comme prévu. Cependant, j'ai un problème de connexion et de déconnexion.

Il existe un bouton "Connexion avec Facebook". Ce bouton passera à la déconnexion (ce bouton de déconnexion est supposé déconnecter l'utilisateur de Facebook) si l'utilisateur s'est connecté.

Un problème (LOGIN IN):

  • La première fois que l'utilisateur clique sur le bouton "Connexion avec Facebook", il est connecté au blog wordpress. Cependant, l'API Facebook ne reconnaîtra pas l'utilisateur et le bouton de connexion à Facebook deviendra un bouton LOGIN au lieu d'un bouton LOGOUT.

  • La deuxième fois, l'utilisateur clique sur le bouton LOGIN, l'API Facebook reconnaît l'utilisateur et le bouton devient LOGOUT.

Alors, pourquoi est-ce que la première fois que l'utilisateur n'est pas reconnu par Facebook mais que la deuxième fois l'est?

L’autre problème est le suivant (LOGIN OUT):

  • Une fois que l'utilisateur se connecte pour la première fois, il clique sur le bouton facebook LOGIN et souhaite se déconnecter de mon blog wordpress via un bouton de déconnexion personnalisé (ce bouton est censé déconnecter l'utilisateur du blog uniquement et non de facebook), cela fonctionne à la perfection!

  • Toutefois, si l'utilisateur s'est connecté en cliquant une nouvelle fois sur le bouton LOGIN de Facebook, vous devez cliquer deux fois sur le bouton de déconnexion personnalisé afin de le déconnecter correctement.

Je sais comment résoudre cela partiellement. Je pourrais simplement vérifier si l'utilisateur est connecté au blog et supprimer le bouton LOGIN; Cependant, je veux savoir pourquoi j'obtiens ce comportement étrange de facebook et en quoi il entre en conflit avec mon blog.

METTRE À JOUR

Pour le deuxième problème (lorsque l'utilisateur se déconnecte), j'ai trouvé la solution. Je venais de détruire la session facebook $facebook->destroySession();

MISE À JOUR 2: RESOLU!

Le tutoriel du lien que j'ai fourni détruisait la session facebook après la connexion et lors de la création d'un nouveau compte pour une raison quelconque. Il me suffisait de retirer $facebook->destroySession(); des deux parties et maintenant tout fonctionne comme prévu.

2
Gixty

Le tutoriel du lien que j'ai fourni détruisait la session facebook après la connexion et la création d'un nouveau compte pour une raison quelconque. Il me suffisait de supprimer $ facebook-> destroySession (); des deux parties et maintenant tout fonctionne comme prévu.

Voici le code du tutoriel avec les deux lignes commentées.

if ($fbuser) {


    $fb_registerpage_name = __('Facebook Register', 'bloora');
    $fbpage = get_page_by_title( $fb_registerpage_name );

    if(isset($user_profile['email'])){
        $user_name = $user_profile['email'];
        $user_email = $user_profile['email'];
        $user_id = username_exists( $user_name );
        if ( !$user_id and email_exists($user_email) == false ) {
                $random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
                $user_id = wp_create_user( $user_name, $random_password, $user_email ); 
                wp_set_current_user( $user_id );
                wp_set_auth_cookie( $user_id );
               // $facebook->destroySession(); THIS HAS TO BE REMOVED

        } else {
                $random_password = __('User already exists.  Password inherited.');

                wp_set_current_user( $user_id );
                wp_set_auth_cookie( $user_id );
               // $facebook->destroySession(); THIS HAS TO BE REMOVED!
        }
    }else{

        if(!is_admin() && isset($_POST) && count($_POST) > 0){

            if($fbpage){

                echo '<script>if(window.location.href != "'.get_permalink($fbpage->ID).'"){ window.location.href = "'.get_permalink($fbpage->ID).'"; }</script>';
            }else{
                // Create post object
                $my_post = array(
                  'post_title'    => $fb_registerpage_name,
                  'post_content'  => 'This is my post.',
                  'post_status'   => 'publish',
                  'post_type'   => 'page',
                  'post_author'   => 1
                );

                // Insert the post into the database
                $fbpage = wp_insert_post( $my_post );
                echo '<script>if(window.location.href != "'.get_permalink($fbpage->ID).'"){ window.location.href = "'.get_permalink($fbpage->ID).'"; }</script>';

            }
        }
    }
}
1
Gixty