让代码更简单

当前位置:代码狗 > WordPress > WP建站 > 正文

WordPress邮箱链接验证可做邮箱激活密码重置及找回

重要:本文最后更新于2020-01-07 09:07:13,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

wordpress的用户功能一直不是很全面,那只是国内开发者不想花时间去开发,某些主题就有很不错的用户中心。其实wordpress提供了很多关于用户的函数,只要肯花时间,你也能做出自己想要的功能。比如本文所讲的WordPress邮箱链接验证功能,此功能可实现邮箱激活、密码重置、密码找回等。

以下代码取自大前端DUX主题,个人觉得DUX的代码比较容易看懂。

先说下WordPress邮箱链接验证功能的实现原理,首先是wordpress为指定用户生成一串校验码,这个校验码存储在_user数据表中的user_activation_key值,然后我们就可以通过邮件,发送带有这串校验码的链接给用户,对方点击后我们取出该链接中的校验码与用户名称,再与数据库中的校验码进行比对,比对结果就是验证结果。

实现代码

生成校验码

global  $wp_hasher,$wp_version;
if ( empty( $wp_hasher ) ) {
        require_once ABSPATH . WPINC . '/class-phpass.php';
        $wp_hasher = new PasswordHash( 8, true );
    }
if( version_compare($wp_version,'4.3.0','>=') ){
        $hashed = time() . ':' . $wp_hasher->HashPassword( $key );
    }else{
        $hashed = $wp_hasher->HashPassword( $key );
    }

wordpress版本大于4.3可以在校验码中加入时间,如果后面的校验是你自己写的函数,这里可以不管版本都加入时间,方便后面比对校验码是否失效。

更新校验码到数据库

$wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user_login ) );

其中$hashed是前面生成的校验码,$user_login是登录用户。

发送邮件我这里就不写了,已经写过很多了,不清楚可以看这里:WordPress发送邮件函数wp_mail使用详解

注意:校验链接应类似如下(登录用户需要url编码使用rawurlencode函数即可):

https://域名/xxx.php?action=xxx&key=校验码&login=登录用户

比对校验码

$user = check_password_reset_key($key, $login);

$key就是接收到的校验码, $login是你的用户名

if ( is_wp_error($user) ) {
        if ( $user->get_error_code() === 'expired_key' ){
          //校验码失效
        }
        else{
           //校验码错误
        }
        exit;
    }
//校验成功,执行下面内容

教程到此结束,不知道大家能不能看懂,我已经尽力写得清晰明了了。

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏

评论 1

  1. #1

    代码小白,表示看不懂,是修改哪个文件呢?
    ripro主题的代码要怎么修改呢?

    大咖库4个月前 (08-10)回复
×

请作者吃根烤肠!

支付宝