在_PASSWORD期间截取无效电子邮件

时间:2018-10-17 作者:GigiSan

在我正在开发的网站上,我需要所有与登录相关的表单都位于定制的品牌页面上。我几乎涵盖了所有这些,但我只有一个案例无法正确处理。

我已经为丢失的密码设置了自定义页面页面,方法是添加下面的过滤器,然后使用自定义模板创建一个新页面,该模板呈现插入电子邮件以获取链接表单。

function custom_lost_password_page( $lostpassword_url, $redirect ) {
    return home_url( \'/lost-password/\' );
}
add_filter( \'lostpassword_url\', \'custom_lost_password_page\', 10, 2 );
在页面模板上,我设置了一个自定义redirect_to 输入字段,以便成功的请求重定向到带有特定消息的自定义登录页面。

<input type="hidden" name="redirect_to" value="<?= site_url(\'/login?resetlink=sent\') ?>">
到目前为止还不错。我似乎无法截获的是,当用户输入一封不存在的电子邮件时。在这种情况下,无论如何,我都会被重定向到/wp-login.php?action=lostpassword, 这是一个我们不想要的本地WP页面,带有相应的错误消息。

Invalid email screen

在这种特殊情况下,我似乎找不到可以锁定的操作或过滤器。不幸的是,谷歌没有提供帮助,这里的所有类似问题似乎都无法处理这个非常具体的案例。

有什么想法吗?提前谢谢,祝你今天愉快!

2 个回复
最合适的回答,由SO网友:djboris 整理而成

尝试以下操作:

add_action( \'lost_password\', \'wpse316932_redirect_wrong_email\' );
function wpse316932_redirect_wrong_email() {
    global $errors;

    if ( $error = $errors->get_error_code() ) {
        wp_safe_redirect( \'lost-password/?error=\' . $error );
    } else {
        wp_safe_redirect( \'lost-password/\' );
    }    
}
这是利用lost_password action hook 在丢失密码表单之前触发。

您遇到这种情况是因为WP只会将您重定向到中指定的urlredirect_to 无错误时输入字段。如果它在处理表单时发现错误(这里的情况很明显),它只会继续在wp-login.php 页通过使用此操作,您可以在此之前挂接到此过程。

SO网友:GigiSan

我暂时找到了一种解决方法,但它并不准确,所以I\'m still open to ideas. :)

我卸下了过滤器

function custom_lost_password_page( $lostpassword_url, $redirect ) {
    return home_url( \'/lost-password/\' );
}
add_filter( \'lostpassword_url\', \'custom_lost_password_page\', 10, 2 );
并在上添加了操作lost_password 相反

function custom_lost_password_page() {
    // If the referrer is lost-password then it\'s a failed attempt,
    // show the form again with an error
    if (strstr($_SERVER[\'HTTP_REFERER\'], \'lost-password\')) {
        wp_redirect(home_url(\'/lost-password?error=invalidemail\'));    
    }
    else {
        wp_redirect(home_url(\'/lost-password/\'));
    }
}
add_action( \'lost_password\', \'custom_lost_password_page\', 10, 0 ); 
如您所见,它会截获来自自身的所有调用,将任何可能的错误屏蔽为invalidemail 错误它符合目的,但不是很干净。

结束

相关推荐

何时调用wp_set_password()或如何获取密码

Disclaimer: I\'m fully aware of the security issues created by this. This is not for production.每当在WordPress中注册新用户或(重新)设置密码时,我都会尝试捕获该密码,对其进行加密,并将其保存到wp\\u usermeta表中。我成功地加入了profile_update 完成此操作,但上述过程仅在配置文件页面中更改密码且不考虑新用户注册时有效。add_action( \'profile_update\'