Obtener ID de usuario después de iniciar sesión

2

Se me ha pedido que agregue un tipo de mecanismo de seguridad a un sitio donde un usuario solo puede acceder a su perfil si tiene un conjunto de cookies después de iniciar sesión, y solo puede tener un máximo de 3 cookies. Hice una tabla en la base de datos para almacenar las cookies, por lo que puedo mantener un recuento de ellas.

Realmente no sé cómo funciona WordPress, pero he podido descubrir que necesito editar el archivo functions.php del tema y agregar una acción usando wp_login . He editado el archivo functions.php , agregué la acción, solicito el ID de usuario y devuelve 0 . Sé que así es como se supone que wp_get_current_user funciona, devuelve 0 si no hay nadie registrado; sin embargo, el usuario ha iniciado sesión, pero todavía no devolverá el ID. Aquí está el código:

add_action( 'wp_login', 'login_cookie' );
function login_cookie() {
    global $wpdb;
    $user = wp_get_current_user();
    //Get current user
    $id = $user->ID;

    if(!isset($_COOKIE['userCookie'])) {
        // Query the database to see how many cookies they have used
        $cookie_count = $wpdb->get_var("SELECT COUNT(*) FROM wp_cookies WHERE user_id=".$id."");
        // If the returned value is bigger or equal to 3 than the user cannot login
        // they will be logged out, and redirected
        if($cookie_count >= 3) {
            wp_logout();   
            wp_redirect("");                
        }
        //Else they can login and they recieve a new cookie, which will get inserted into the database 
        else {
            $value = password_hash($id,PASSWORD_DEFAULT);
            setcookie('userCookie', $value, time()+360000*24*100, "", "",false);
            $wpdb->insert(
                "wp_cookies",
                [ 'user_id'=>$id, 'cookie_value'=>$value ],
                [ '%d', '%s' ]
            );
        }
    }
}

También esto debería afectar solo a los usuarios normales, no a los administradores. ¿Alguna idea para eso?

    
pregunta user2941726 08.05.2015 - 10:41

2 respuestas

4

wp_login hook proporciona acceso a dos parámetros: $user->user_login (cadena) y $user (WP_User). Para pasarlos a su función, deberá agregar una prioridad (el valor predeterminado es 10) y solicitar 2 argumentos de la llamada add_action ():

function login_cookie($user_login, $user) {
    global $wpdb;

    var_dump($user); // get WP_User object

    //Get current user ID
    $id = $user->ID;
    .....
}

add_action( 'wp_login', 'login_cookie', 10, 2 );
    
respondido por el Jayson 08.05.2015 - 11:42
1

En realidad, el gancho wp_login está pasando el objeto de usuario en su parámetro.

function login_cookie( $user_login, $user ) {
    $user_id = $user->ID; // get user id
    // your next code
}
add_action( 'wp_login', 'login_cookie', 10, 2 );
    
respondido por el Emetrop 08.05.2015 - 11:43

Lea otras preguntas en las etiquetas