Registro do usuário seguido de login automático


15

Estou usando um plugin modificado para meus propósitos.

O que estou procurando é depois que o usuário se registrou para fazer logon automaticamente e retorná-los à página atual. No momento, ele envia um e-mail com seu nome de usuário e senha. Eles precisam fazer login usando esses detalhes.


você está usando o formulário de registro padrão ou um personalizado?
Bainternet

Um personalizado, mas baseado em redirecionamentos, para que os códigos projetados para funcionar com o sistema padrão possam funcionar e, se não, provavelmente posso modificá-lo.
Robin I Knight

Acho que devo salientar que o login automático de um usuário no registro contorna parte da segurança do login. Normalmente, um usuário não pode fazer login sem fornecer um endereço de email válido. O usuário precisa se registrar, receber um e-mail e fazer login. Se você remover a etapa de e-mail, seus usuários poderão se registrar com endereços falsos, efetuar login automaticamente e acessar o back-end, comentar o que seus assinantes padrão puderem fazer. Quem se beneficiaria? Spammers, por um lado. Os hackers também gostariam de procurar buracos no seu back-end sem precisar fornecer um endereço que possa ser revelador.
S_ha_dum

Respostas:


10

Basicamente, para registrar um usuário, você pode usar:

            //Login the user
    $creds = array();
    $creds['user_login'] = $login;
    $creds['user_password'] = $password;
    if ( !empty( $remember ) ){ 
        $creds['remember'] = true;
    }
    $user = wp_signon( $creds, true );

mas é somente quando você tem a senha e o login para poder criar seu próprio formulário de registro, processá-lo e criar o usuário por conta própria

//Only after Everything has been validated, proceed with creating the user
        //Create the user
        $user_pass = wp_generate_password();
        $user = array(
            'user_login' => $username,
            'user_pass' => $user_pass,
            'first_name' => $firstname,
            'last_name' => $lastname,
            'user_email' => $email
        );
        $user_id = wp_insert_user( $user );

        /*Send e-mail to admin and new user - 
        You could create your own e-mail instead of using this function*/
        wp_new_user_notification( $user_id, $user_pass );

e aqui temos o login e a senha para que você possa efetuar o login.

Espero que isto ajude


2
Não existe um filtro de registro que possa ser conectado?
Zack

1
Tricky, vou ver se consigo integrá-lo. Não há maneira mais fácil então. Acho que o wordpress não tem interesse em fornecer um bom e conveniente get_the_password (), pois envia por e-mail.
Robin I Knight

5

Não há um local ideal para se conectar ao processo de registro. Eu acho que há um argumento forte para adicionar um gancho de ação de evento de registro de usuário ao núcleo. Mas acho que você poderá fingir, enquanto isso. Uma das últimas coisas que acontecem quando um usuário se registra com êxito é a criação de uma opção de usuário chamada 'default_password_nag'. Podemos criar uma ação para observar isso e configurar o usuário quando ele estiver definido.

add_action('update_user_metadata', 'my_auto_login', 10, 4);

function my_auto_login( $metaid, $userid, $key, $value ) {
    // We only care about the password nag event. Ignore anything else.
    if ( 'default_password_nag' !== $key  && true !== $value) {
        return;
    }

    // Set the current user variables, and give him a cookie. 
    wp_set_current_user( $userid );
    wp_set_auth_cookie( $userid );
}

Não testado, mas deve funcionar, em teoria.

Agora que temos uma idéia do que fazer, opino que acho que essa é uma má idéia, em termos de segurança. As pessoas podem criar contas indesejadas sem precisar se preocupar em configurar uma caixa de depósito de lixo eletrônico. :)


1
user_register é um ótimo lugar para se conectar, por isso eu acho?
Jsims281

1

Eu apenas conseguiu obter essa funcionalidade trabalhar usando o gancho user_register e o seguinte código no meu functions.php :

// auto log in a user who has just signed up       
function auto_login_new_user( $user_id ) {
  wp_set_auth_cookie( $user_id, false, is_ssl() );
}
add_action( 'user_register', 'auto_login_new_user' );

Isso ainda deve enviar um e-mail para confirmar o registro? Não estou mais recebendo isso.
Codecowboy 27/09/11

0
function login_after_register($userlogin,$userpass){
    $credentials = array( 'user_login' =>  $userlogin, 'user_password' => $userpass, 'remember' => true );

    $secure_cookie = is_ssl();

    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
    add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);

    $user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
    wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
    do_action('wp_login', $user->user_login, $user);
}

1
Forneça explicações junto com o seu código.
S_ha_dum 26/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.