Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
12/12/2017 02:26:15 AM (9 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.