重置密码后自动登录

时间:2019-09-04 作者:Matteo Feduzi

我找到了这段代码,正在测试它,但它不起作用。

我如何解决它?

add_action( \'validate_password_reset\', \'rsm_redirect_after_rest\', 10, 2 );
function rsm_redirect_after_rest($errors, $user) {
    if ( ( ! $errors->get_error_code() ) && isset( $_POST[\'pass1\'] ) && !empty( $_POST[\'pass1\'] ) ) {
        reset_password( $user, $_POST[\'pass1\'] );
        setcookie( $rp_cookie, \' \', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
        wp_set_current_user( $user->ID );
        wp_set_auth_cookie( $user->ID );
        do_action( \'wp_login\', $user->user_login );//`[Codex Ref.][1]
        wp_redirect( home_url() );
        exit;
    }
}
这是我得到的错误:

警告:Cookie名称不能为空

感谢那些帮助我的人。

RESOLVED:

我按照您的建议使用了以下代码,现在它可以完美地工作:

add_action( \'validate_password_reset\', \'rsm_redirect_after_rest\', 10, 2 );
function rsm_redirect_after_rest($errors, $user) {
    global $rp_cookie, $rp_path;
    if ( ( ! $errors->get_error_code() ) && isset( $_POST[\'pass1\'] ) && !empty( $_POST[\'pass1\'] ) ) {
        reset_password( $user, $_POST[\'pass1\'] );
        setcookie( $rp_cookie, \' \', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
        wp_set_current_user( $user->ID );
        wp_set_auth_cookie( $user->ID );
        do_action( \'wp_login\', $user->user_login );//`[Codex Ref.][1]
        wp_redirect( home_url() );
        exit;
    }
}

2 个回复
最合适的回答,由SO网友:Ted Stresen-Reuter 整理而成

$rp_cookie$rp_path 在函数内,但未在函数内初始化,因此它们超出范围,因此为空。你可以试着打电话global $rp_cookie, $rp_path; 但我不知道这些变量在函数运行时是否已设置,因此它们可能仍然为空。

另一种更“现代”的方法是通过修改函数签名将变量添加到函数范围中:

add_action( \'validate_password_reset\',
function rsm_redirect_after_rest($errors, $user) use ($rp_cookie, $rp_path) {
    if ( ( ! $errors->get_error_code() ) && isset( $_POST[\'pass1\'] ) && !empty( $_POST[\'pass1\'] ) ) {
        reset_password( $user, $_POST[\'pass1\'] );
        setcookie( $rp_cookie, \' \', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
        wp_set_current_user( $user->ID );
        wp_set_auth_cookie( $user->ID );
        do_action( \'wp_login\', $user->user_login );//`[Codex Ref.][1]
        wp_redirect( home_url() );
        exit;
    }
}, 10, 2 )
请注意use ($rp_cookie, $rp_path) 在匿名函数之后,如果在运行此函数之前未设置这些变量,则它们仍然为空。HTH。

SO网友:djboris

您的代码没有任何问题,只是使用了两个未在代码中设置的变量,您甚至可能不需要它们。请完全删除此行,然后重试:

setcookie( $rp_cookie, \' \', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );

相关推荐

无论如何,要像使用wp_LOGIN_Form()一样输出注册表单吗?

我正在尝试用WordPress创建一个双重登录/注册页面,到目前为止,我发现我可以创建自定义模板,然后用wp_login_form, 然而,我找不到任何能够对注册表进行类似操作的参考。我看了几篇文章,也没有一篇提到类似的内容,其中许多文章只是求助于插件。有没有办法做到这一点,或者我必须选择另一种方式来定制现有的注册页面,看看是否可以在上面输出登录表单!?