web-dev-qa-db-fra.com

Quand charger le code de connexion automatique?

J'utilise ce code (simplifié) pour connecter automatiquement les utilisateurs via un plugin pour un système d'authentification unique:

$user_info = get_userdatabylogin( $username );
$user_id = $user_info->ID;
wp_set_current_user( $user_id );
wp_set_auth_cookie( $user_id );
do_action( 'wp_login', $username );

De nombreux extraits de code que j'ai trouvés en ligne lieront ce code à l'action init. Lorsque j'utilise init, je ne parviens pas à synchroniser le chargement des éléments sur la page. Par exemple, la barre d'outils de l'utilisateur n'apparaît que lors du chargement de la deuxième page tandis que le méta-lien Log In devient Logout sur la première. Il semble que certains éléments se chargent avant la configuration de la session utilisateur.

Quand devrais-je charger ce code? En regardant http://codex.wordpress.org/Plugin_API/Action_Reference , plugins_loaded est-il le meilleur moment?

Merci, mike

J'ai fini par utiliser l'action ou l'état "plugins_loaded" de http://codex.wordpress.org/Plugin_API/Action_Reference :

Dans mon fichier de plugin principal, j'ai:

include_once( 'lib/class-my-auth.php' ); // your class file here
add_action( 'plugins_loaded', 'My_Auth::auto_login' );

Dans lib/class-my-auth.php:

<?php

class My_Auth {

    private static $successfully_connected_Main_to_WP = false;

    public static function auto_login() {

            $username = ...; // Integrate with main site to get username from active session

            // Check if WP user is logged in
            if ( is_user_logged_in() ) {

                // Get current WP user
                $current_wp_user = wp_get_current_user();

                // Logout if the current WP user is different than the main site user
                if ( strToLower( $username ) !== strToLower( $curren_wp_user->user_login ) ) {
                    self::logout_of_wp();
                } else {
                    self::$successfully_connected_Main_to_WP = true;
                }

            }

            // If a connection b/w main site & WP has not been established, login if possible
            if ( ! self::$successfully_connected_Main_to_WP && $user_info = get_userdatabylogin($username) ) {

                $user_id = $user_info->ID;

                if ( $user_id > 0 ) {
                    wp_set_auth_cookie( $user_id );
                    wp_set_current_user( $user_id );
                    self::$successfully_connected_Main_to_WP = true;
                }

            }

        }

        // If no connection b/w main site & WP was established, and the user is
        // logged in, logout.
        if ( ! self::$successfully_connected_Main_to_WP && is_user_logged_in() ) {
            self::logout_of_wp();
        }

    }

    private static function logout_of_wp() {

        // Clear the auth cookie, and do other stuff
        wp_clear_auth_cookie();
        do_action('wp_logout');

        // Unset the current user
        wp_set_current_user(0);

    }

}
1