真正的注册电子邮件确认(将未经验证的用户从USER表中删除)

时间:2017-08-22 作者:Bob Diego

I\'m looking for a method to keep users out of the wp_users table until they have confirmed their email address.

WordPress通过电子邮件向新用户发送密码,这实际上是电子邮件确认。但无论他们是否确认——即使电子邮件是假的——他们已经被添加到表中。你无法区分哪些人已经确认,因此他们会填写你的用户表,如果有人以后试图注册该电子邮件(如果他们从未收到该电子邮件,或从未回复,或其他人使用了他们的电子邮件地址等),则会造成混淆。我不希望未确认的用户/电子邮件出现在我的wp\\u users表中。

我在寻找一种方法

在48小时后清除未确认的帐户,或者更好的做法是将它们放在一个中间表中,直到确认为止,然后注册它们,并在48小时超时后清除条目,似乎没有基本插件可以做到这一点。有一个插件将“unconfirmed\\u user\\”添加到用户名的开头,直到他们确认,然后将其删除,但这仍然会将其保留在用户表中,并且在超时后不会将其删除。

BuddyPress做了我想做的一切,但是有很多膨胀,还有很多额外的桌子。

实现我的目标最优雅的方法是什么?我认为这将涉及(至少):

一个中间表,其中包含用户名、电子邮件、生成的密钥和时间戳,连接到注册函数并拦截注册,并将用户存储在表中(EDIT: 或者更简单地说,在本机注册过程之后,从wp\\u users表中删除并将其添加到signup表)。然后通过电子邮件发送确认,并将密钥附加到wp登录。php url截取具有有效密钥的登录并删除条目,并以编程方式注册用户(基本上与步骤2相反)

  • 运行cron函数以在48小时后删除注册是否有我错过的无膨胀插件可以实现这一点,如果没有,我的方法听起来是否正确?涉及哪些关键挂钩?我是否错过了流程中的任何“陷阱”?

  • 1 个回复
    SO网友:Tom J Nowell

    这似乎是一个XY问题,其中Y是您要问的(试图解决X,您真正的问题),X是无法仅检索已确认/活动用户

    首先,您想要在多站点中执行的操作不太可能,已经有一个名为wp_signups 对于这些用户,这将跟踪待定的确认和必要的密钥,因为用户可能在一个博客上被确认,而不是在另一个博客上。因此,删除根博客上未确认的用户可能会删除其他博客上已确认的用户,从而破坏数据/登录。

    因此,我将在一个单一站点的上下文中回答您最初的问题,因为它非常简单:

    SELECT * FROM $wpdb->users WHERE user_status != 2

    取自名为unconfirmed, 但逻辑颠倒了

    结束

    相关推荐

    Testing hooks callback

    我正在开发一个使用TDD的插件,有一件事我完全没有测试出来,那就是。。。挂钩。我的意思是好的,我可以测试钩子回调,但我如何测试钩子是否真的触发了(自定义钩子和WordPress默认钩子)?我认为一些嘲弄会有所帮助,但我就是想不出我错过了什么。我用WP-CLI安装了测试套件。根据this answer, init 钩子应该触发,但。。。事实并非如此;此外,该代码在WordPress内部工作。根据我的理解,引导程序是最后加载的,所以不触发init是有意义的,所以剩下的问题是:如果触发了挂钩,我该如何测试?谢谢