如何在注册时将特定的电子邮件域列入白名单

时间:2019-01-31 18:15:49

标签: php wordpress email whitelist

我们在WordPress上有一个发布网站,我们希望任何人都可以注册,但是使用某些电子邮件域注册的人将可以访问更多内容。我们使用的是Paid Memberships Pro WordPress插件,试图弄清楚如何在注册时为他们分配成员资格,但我们不知道php。

之所以我们不能仅让他们注册时为其提供免费的会员级别,是因为我们希望他们通过Auth0登录小部件注册我们的网站,该小部件不允许他们选择会员级别

我们认为的阵列将是有用的,是这样的:

$domain_name = array("ipqpubs.com", "ipqpubs.org");

if (in_array("ipqpubs.com", $domain_name))

if (domain_list($domains))
    $hasaccess = true;

但是我们不知道这是否可行,或者从那里去哪里。我们在他们的文件中发现了一些有用的东西,例如:

function pmpro_hasMembershipLevel( $levels = null, $user_id = null ) {
    global $current_user, $wpdb;

    $return = false;

    if ( empty( $user_id ) ) {
        $user_id = $current_user->ID;
    }

if ( ! empty( $user_id ) && is_numeric( $user_id ) ) { // get membership 
levels for given user
        $membership_levels = pmpro_getMembershipLevelsForUser( $user_id );
    } else {
        $membership_levels = null; // non-users don't have levels
    }

pmpro_getMembershipLevelsForUser( $user_id );
return pmpro_changeMembershipLevel( 0, $user_id, $old_level_status );
}           

因此,我们认为也许其中一个或类似的名称可以在他们注册后立即用于为其分配会员级别,这样他们就无需执行其他任何操作即可看到我们网站上的所有内容。

预先感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如果您可以收到用户的电子邮件,则可以尝试将其与包含以下内容的正则表达式进行匹配:

$userEmail = $currentUser->email ?? ""; // Assumed property of $currentUser
if (preg_match('/(@ipqpubs.com|@ipqpubs.org)/', $userEmail)) {
    // User has an email that matches one of the domains!
} else {
    // User does not have an email that matches any of the domains.
}

如果“认可”域名列表中获取长,你可以做如下:

$approvedDomains = ['ipqpubs.com', 'ipqpubs.org'];
$approvedDomainFilter = '/('.join('|@', $approvedDomains).')/';

$userEmail = $currentUser->email ?? ""; // Assumed property of $currentUser
if (preg_match($approvedDomainFilter, $userEmail)) {
    // User has an email that matches one of the domains!
} else {
    // User does not have an email that matches any of the domains.
}

不原样使用此解决方案。您需要确保将$ userEmail变量设置为用户的实际电子邮件,并编写在电子邮件匹配时应执行的代码。