Login automático após registro

Gostaria que o usuário fosse logado automaticamente sem inserir o nome de usuário e a senha quando clicarem no link no e-mail enviado depois de preencher o formulário de inscrição.

Como eu posso fazer isso?

Solutions Collecting From Web of "Login automático após registro"

Aqui está uma abordagem básica.

Primeiro, você precisaria passar algo no link para fornecer algumas informações do usuário que você pode usar para registrar o usuário. Para fazer isso, você precisa filtrar o e-mail que vai ao usuário. (Seria possível carregar realmente um novo e-mail de registro de usuário personalizado, mas isso deveria ser feito como um plugin, pois essa function é uma function conectável. Em vez de fazer isso, esse método apenas filtra o conteúdo do email com base na linha de assunto para o e-mail de inscrição.)

// Adicionar filtro para cadastro de e-mail de registro

add_filter( 'wp_mail', 'set_up_auto_login_link' ); function set_up_auto_login_link( $atts ) { // if the email subject is "Your username and password" if ( isset ( $atts ['subject'] ) && $atts['subject'] = 'Your username and password' ) { if ( isset( $atts['message'] ) ) { $old = '/wp-login.php'; $new = '/wp-login.php?user=' . $_POST['user_login']; $atts['message'] = str_replace( $old, $new, $atts['message'] ); } } return $atts; } 

Isso colocará o nome de usuário selecionado do formulário de registro no e-mail na forma de uma seqüência de consulta adicionada ao link de login. Esse nome de usuário pode ser usado para registrar o usuário quando eles clicam no link.

Para fazer isso, fiquei preso à ação de init. Isso verificará o parâmetro “usuário” na seqüência de consulta. Se isso existir, ele usa get_user_by para obter os dados do usuário pelo nome de usuário (login). Se isso retornar um usuário válido, podemos usar o nome de usuário e o ID do usuário recuperado para registrar o usuário em:

 add_action( 'init', 'log_user_in' ); function log_user_in() { if ( isset( $_GET['user'] ) ) { // get the username from the URL $user_login = $_GET['user']; // get the user data (need the ID for login) $user = get_user_by( 'login', $user_login ); // if a user is returned, log them in if ( $user && ! user_can( $user->ID, 'manage_options' ) ) { wp_set_current_user( $user->ID, $user_login ); wp_set_auth_cookie( $user->ID ); do_action( 'wp_login', $user_login ); wp_redirect( home_url() ); exit(); } } } 

Observe que este processo não lhe dá segurança real, já que qualquer pessoa com um nome de usuário válido pode fazer login como usuário. Ele verifica se o usuário que está logado não é um administrador (user_can (‘manage_options’)) caso contrário, qualquer pessoa com o login do administrador pode ter access. Seria útil construir algumas verificações adicionais – provavelmente crie uma chave ou hash para adicionar ao link também, algo feito no registro que poderia ser usado para validar o usuário.

 // Connect auto the new user $creds = array(); $creds['user_login'] = $nom; $creds['user_password'] = $pass; $creds['remember'] = false; $user = wp_signon( $creds, false );