VPS参考、测评、推荐
分享你关注的VPS主机优惠信息

构建自定义wordpress用户过程,第三部分:密码重置(WordPress检索密码)

构建自定义wordpress用户过程,第三部分:密码重置(WordPress检索密码)

在本系列的前两篇教程中,我们了一个用于登录和注册新用户的定制。现在,登录过程中只有一部分需要探索和替换:如果用户忘记密码并想重置wordpress密码会发生什么?

在本教程中,我们将解决一步并完成我们在整个系列中的个性化登录插件。

WordPress中的密码重置功能或多或少遵循了当今网站上的标准方法:

用户通过输入用户名或电子邮件并请求WordPress重置密码来启动重置。创建一个临时密码重置令牌并将其存储在用户数据中。包含此令牌的将发送到用户的电子邮件。用户点击。在重置密码上,验证令牌,如果令牌与用户的数据匹配,可以选择新密码。就像登录和新用户注册一样,该功能通过wp-login.php处理。因此,如何定制这个过程的一般思想现在与以前的教程非常相似。

如果您阅读前两个教程,最好从第1部分开始,并按顺序浏览该系列。您可以根据教程编写自己的代码,也可以从链接的GitHub资源库下载完整的源代码。

现在,让我们开始更换流程中的第一个屏幕。

启动WordPress重置密码当用户到达您的登录页面但不记得在网站上使用的密码时,将开始重置WP密码。

为此,在本系列的第一部分中,我们在登录表单的底部放置了一个忘记的密码。消息模板链接。默认情况下,在WordPress支持的网站上,这个链接指向wp-login.php?Action=lostpassword,页面如下:

构建自定义wordpress用户过程,第三部分:密码重置(WordPress检索密码)

为了用自页面替换该页面,我们将创建一个函数来将用户重定向到我们的自页面,并将该函数与WordPress操作挂钩。

在这种情况下,我们有两个选项可供选择:我们可以使用操作lost_password(在页面呈现之前调用),或者使用我们在上一教程中使用的操作:login_form_{action},这次是login_form_lostpassword。

我们可以采用两种方法,但是为了限制不必要的代码执行量,让我们选择后一种方法。

但是首先,让我们创建一个新的WordPress自定义密码重置页面:

步骤1:创建重置密码页面p》

正如您所记得的,在第1部分中,我们使用plugin_activated回调函数创建了一个函数,该函数在插件被激活时创建一个WordPress页面。

在这个函数中,新页面的定义被添加到$page_definitions数组的末尾。在WordPress密码重置过程中,我们还需要第二个页面来选择新密码。因此,为了节省时间,我们现在添加第二页。

为了清楚起见,这是整个数组(添加了两个页面定义):

//创建插件页面所需的信息$ page _ definitions = array(‘member-log in‘= & gt;数组(‘title‘= & gt;_ _(‘登录‘,‘个性化-登录‘),‘内容‘= & gt;’

第四步:处理WordPress帐户恢复表单提交现在我们已经创建了WordPress密码表单,接下来看看用户提交时会发生什么。

为了让我们在不求助于黑客的情况下正确处理错误,我们需要自己编写一些函数——当然是尽可能多地使用wp-login.php中的辅助函数。

为此,我们将在login_form_lostpassword操作中添加一个新函数来处理POST请求。

该函数将在wp-login.php中定义,使用retrieve_password函数查找用户并启动密码更新过程。然后,根据是否有错误,该函数将用户重定向到正确的页面:如果有错误,返回到忘记密码?消息模板页面,成功后,进入登录页面。

在构造函数中,添加下面一行:

add _ action(‘log in _ form _ lost password’,array($ this,‘do _ password _ lost’);然后,创建一个函数:

/** *启动密码重置。*/公共函数do _ password _ lost(){ if(‘POST‘= = $ _ SERVER

为了显示错误,我们将返回到丢失的WordPress更改密码表单。

首先,在短代码处理程序render_password_lost_form中,在呈现模板之前,添加以下行来遍历错误代码并收集数组中匹配的错误消息$属性。

这是一个简单的表单,包含两个字段:pass1和pass2。一个用于输入WordPress的密码,另一个用于重新输入密码以检查是否有拼写错误。

为了创建该表单的定制版本,我们将使用短代码。

首先,将下面一行添加到插件的构造函数中:

add _ short code(‘custom-password-reset-form’,array($ this,‘render _ password _ reset _ form’);然后,创建一个函数来呈现表单:

/** *用于呈现表单的短代码,该表单用于重置用户密码。* * @param array $attributes短代码属性。* @param string $content短代码的文本内容。没。* * @return string短代码输出*/公共函数render _ password _ reset _ form($ attributes,$ content = null){//解析短代码属性$ default _ attributes = array(‘show _ title‘= & gt;假的);$ attributes = short code _ atts($ default _ attributes,$ attributes);if(is _ user _ logged _ in()){ return _ _(‘您已经登录。,‘个性化-登录’);} else { if(isset($ _ REQUEST

步骤3:处理WordPress密码重置操作当用户通过点击WordPress密码重置按钮提交表单时,其内容将被发送到wp-login.php?Action=resetpass,这是我们用来将用户重定向到自定义密码重置页面的URL。

当然,当我们创建自己的表单时,我们也可以使用不同的URL。但是,通过保留这个默认URL并用login_form_resetpass(和login_form_rp,只是为了确认)替换默认函数,我们可以确保人意外地结束调用默认版本的密码重置。

为此,再次向构造函数添加两行:

add _ action(‘log in _ form _ RP’,array($ this,‘do _ password _ reset’));add _ action(‘log in _ form _ reset pass’,array($ this,‘do _ password _ reset’));然后,创建一个函数:

/** *如果提交了密码重置表单,则重置用户的密码。*/public function do _ password _ reset(){ if(‘POST‘= = $ _ SERVER【‘REQUEST _ METHOD‘】){ $ RP _ key = $ _ REQUEST【‘RP _ key‘】;$ RP _ log in = $ _ REQUEST【‘RP _ log in‘】;$ user = check _ password _ reset _ key($ RP _ key,$ RP _ log in);如果(!$ user | | is _ WP _ error($ user){ if($ user & amp;& amp$ user-& gt;get _ error _ code()= = =‘expired _ key’){ WP _ redirect(home _ URL(‘member-log in?log in = expired key‘));} else { WP _ redirect(home _ URL‘‘member-log in?log in = invalid key‘));}退出;} if(isset($ _ POST【‘pass 1‘】){ if($ _ POST【‘pass 1‘】!= $ _ POST【‘pass 2‘】){//密码不匹配$ redirect _ URL = home _ URL(‘member-password-reset‘);$ redirect _ URL = add _ query _ arg(‘key‘,$rp_key,$ redirect _ URL);$ redirect _ URL = add _ query _ arg(‘log in‘,$rp_login,$ redirect _ URL)$ redirect _ URL = add _ query _ arg(‘error‘,password _ reset _ mismatch,$ redirect _ URL);WP _ redirect($ redirect _ URL);退出;} if(empty($ _ POST【‘pass 1‘】)){//Password为空$ redirect _ URL = home _ URL(‘member-Password-reset‘);$ redirect _ URL = add _ query _ arg(‘key‘,$rp_key,$ redirect _ URL);$ redirect _ URL = add _ query _ arg(‘log in‘,$rp_login,$ redirect _ URL);$ redirect _ URL = add _ query _ arg(‘error‘,password _ reset _ empty,$ redirect _ URL);WP _ redirect($ redirect _ URL);退出;} //参数检查,重置密码reset _ password($ user,$ _ POST【‘pass 1‘】);WP _ redirect(home _ URL(‘会员登录?password = changed‘));} else { echo & quot无效请求。”;}退出;}}这个函数首先检查请求方法,应该是POST上面的重定向函数已经处理了GET请求。

然后,它从表单数据中收集密钥和登录参数,并使用它们来验证第9行的密码重置链接,使用WordPress函数check_password_reset_key(我们已经在重定向函数中使用了相同的函数)。

在第10-18行中,我们再次检查密码重置键检查中的可能错误,并将用户重定向到“忘记密码?”呈现消息模板页面时出错。

然后,如果重置密钥有效,我们可以关注WordPress帐户恢复表单。

首先,该函数检查两个密码是否匹配(第231行),然后检查它们是否为空(第343行)。在这两种情况下,用户将被重定向回我们的密码重置页面,URL包含密钥和登录参数,以便用户可以重试密码更新。p >

最后,如果所有检查都成功(如果您愿意,可以添加更多检查),该函数将使用函数reset_password重置WordPress密码(位于第46行),将用户重定向到登录页面,并将参数password=changed附加到URL以显示通知。

WordPress密码已经成功更新,剩下的就是显示成功通知和添加错误消息。

首先,让我们添加一个通知。在短代码函数render_login_form中,添加以下检查:

//检查用户是否刚刚更新了密码$ attributes【‘password _ updated‘】= isset($ _ REQUEST【‘password‘】)& amp;& amp$ _ REQUEST【‘密码‘】= =‘已更改‘;然后,在呈现表单之前将实际消息添加到login_form.php模板中:

& lt?PHP if($ attributes【‘password _ updated‘】):?& gt& ltp class = & quot登录信息& gt& lt?PHP _ e(‘您的密码已经更改。你现在可以登录了。,‘个性化-登录’);?& gt& lt/p & gt;& lt?php endif?& gt由于我们已经添加了对呈现上述错误消息的支持,剩下的工作就是向我们的函数get_error_message添加性错误消息。

在交换机的默认分支之前添加以下行…案例结构:

//Reset password case“expired key”:case“invalid key”:return _ _(“您使用的密码重置链接不再有效。”,‘个性化-登录’);case“password _ reset _ mismatch”:return _ _(& quot;您输入的两个密码不匹配。”,‘个性化-登录’);case“password _ reset _ empty”:return _ _(& quot;抱歉,我们不接受空密码。”,‘个性化-登录’);这就是结论!重置WP密码的功能已经准备好了,所以我们现在已经完成了WordPress登录体验的定制,从注册新用户到登录并重置丢失的密码。

我希望本系列为您提供了足够的工具,以便您可以更好地进一步定制它(例如,通过向密码重置过程添加新步骤)并更好地了解wp-login.php内部发生的事情。

现在,去定制更多内容吧!

:构建自定义wordpress用户过程,第三部分:密码重置(WordPress检索密码) https://vps.caogenba.com.com/110548.html

赞(0) 打赏
未经允许不得转载:草根吧VPS_最新VPS信息参考 » 构建自定义wordpress用户过程,第三部分:密码重置(WordPress检索密码)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址