Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
12/12/2017 02:26:15 AM (8 years ago)
Author:
boonebgorges
Message:

Members: Require a form submission to activate an account.

Previously, simply loading a URL of the form /activate/12345 would activate
the account with key 12345. This caused conflicts with some mail scanning
services, which follow links in emails, causing accounts to be self-activated.

A small backward-compatibility layer ensures that custom activate.php
templates containing forms with action="get" continue to work.

Fixes #6049.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-members/bp-members-actions.php

    r10711 r11766  
    108108}
    109109
     110/**
     111 * Catches and processes account activation requests.
     112 *
     113 * @since 3.0.0
     114 */
     115function bp_members_action_activate_account() {
     116    if ( ! bp_is_current_component( 'activate' ) ) {
     117        return;
     118    }
     119
     120    if ( is_user_logged_in() ) {
     121        return;
     122    }
     123
     124    if ( ! empty( $_POST['key'] ) ) {
     125        $key = wp_unslash( $_POST['key'] );
     126
     127    // Backward compatibility with templates using `method="get"` in their activation forms.
     128    } elseif ( ! empty( $_GET['key'] ) ) {
     129        $key = wp_unslash( $_GET['key'] );
     130    }
     131
     132    if ( empty( $key ) ) {
     133        return;
     134    }
     135
     136    $bp = buddypress();
     137
     138    /**
     139     * Filters the activation signup.
     140     *
     141     * @since 1.1.0
     142     *
     143     * @param bool|int $value Value returned by activation.
     144     *                        Integer on success, boolean on failure.
     145     */
     146    $user = apply_filters( 'bp_core_activate_account', bp_core_activate_signup( $key ) );
     147
     148    // If there were errors, add a message and redirect.
     149    if ( ! empty( $user->errors ) ) {
     150        bp_core_add_message( $user->get_error_message(), 'error' );
     151        bp_core_redirect( trailingslashit( bp_get_root_domain() . '/' . $bp->pages->activate->slug ) );
     152    }
     153
     154    bp_core_add_message( __( 'Your account is now active!', 'buddypress' ) );
     155    bp_core_redirect( add_query_arg( 'activated', '1', bp_get_activation_page() ) );
     156
     157}
     158add_action( 'bp_actions', 'bp_members_action_activate_account' );
     159
    110160/*
    111161 * Unhooked in 1.6.0 - moved to settings
Note: See TracChangeset for help on using the changeset viewer.