Tornar a senha inválida uma vez desconectada da página protegida por senha

4

Em um site baseado em WP eu tenho um formulário personalizado que eu preciso esconder do público em geral e dar acesso a apenas alguns poucos que, em seguida, receberiam uma senha de mim, entrar, acessar o formulário e enviá-lo. No envio do formulário, eu os redireciono para outra página. Eu usei esse código abaixo no meu functions.php , que faz o logout da página protegida por senha, uma vez redirecionada:

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);
}

Agora, a reviravolta: quando qualquer um desses poucos selecionados for desconectado da página protegida por senha, preciso que a senha se torne inválida. Não necessariamente, mas como uma senha única. Uma solução seria ótima, ou por favor me dê algumas dicas ou alternativas, se não for possível.

    
por gurung 24.10.2013 / 20:26

2 respostas

1

Após enviar o formulário e antes de redirecionar para uma nova página, redefina a senha do usuário atual.

Um simples wp_update_user(array('ID' => $userid, 'user_pass' => 'YourNewPaSSword')); fará tudo por você.

    
por palPalani 08.01.2014 / 16:40
0

Eu fiz esse pequeno teste e ele funciona, mas não tenho ideia se estiver tecnicamente correto :

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' );
}

Mas há um problema maior: temos uma senha por página, não uma senha por pessoa. Quando o primeiro entrar no passe, os próximos não poderão usá-lo. Você precisará criar sua própria solução definindo senhas diferentes e desativando cada uma delas assim que a pessoa a usar.

    
por brasofilo 24.10.2013 / 22:28