Hacer que la contraseña no sea válida una vez que se haya desconectado de la página protegida por contraseña

4

En un sitio basado en WP tengo un formulario personalizado que necesito ocultar al público en general y dar acceso solo a unos pocos seleccionados que luego obtendrían una contraseña mía, ingrésela, acceda al formulario y envíela. Al enviar el formulario, los redirecciono a otra página. He empleado este bit de código a continuación en mi functions.php , que los desconecta de la página protegida por contraseña, una vez redirigido:

add_action( 'wp', 'post_pw_sess_expire' );
    function post_pw_sess_expire() {
    if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
    // Setting a time of 0 in setcookie() forces the cookie to expire with the session
    setcookie('wp-postpass_' . COOKIEHASH, '', 0, COOKIEPATH);
}

Ahora, el giro: una vez que alguno de estos pocos seleccionados se desconecta de la página protegida por contraseña, necesito la contraseña para no ser válida. No necesariamente, sino una especie de contraseña de un solo uso. Una solución sería genial, o dame algunos consejos o alternativas si no es posible.

    
pregunta gurung 24.10.2013 - 20:26

2 respuestas

1

Después de enviar el formulario y antes de redirigir a una nueva página, restablece la contraseña del usuario actual.

Un simple wp_update_user(array('ID' => $userid, 'user_pass' => 'YourNewPaSSword')); hará todo por ti.

    
respondido por el palPalani 08.01.2014 - 16:40
0

Hice esta pequeña prueba y funciona, pero no tengo ni idea si es técnicamente correcto :

add_action( 'wp', 'post_pw_sess_expire' );

function post_pw_sess_expire() 
{
    if ( isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
    {
        // Setting a time of 0 in setcookie() forces the cookie to expire with the session
        setcookie('wp-postpass_' . COOKIEHASH, '', 0, COOKIEPATH);
        add_action( 'wp_footer', 'change_pw_wpse_119986' );
    }
}

function change_pw_wpse_119986()
{
    global $post;
    if( $post->post_password == md5('something') )
        return;
    $post->post_password = md5('something');
    wp_update_post( $post );
    remove_action( 'wp_footer', 'change_pw_wpse_119986' );
}

Pero hay un problema mayor: tenemos una contraseña por página, no una contraseña por persona. Una vez que el primero entre al pase, los siguientes no podrán usarlo. Tendrá que crear su propia solución configurando diferentes contraseñas y eliminando cada una tan pronto como la persona la use.

    
respondido por el brasofilo 24.10.2013 - 22:28

Lea otras preguntas en las etiquetas