自定义前端注册-密钥如何在密码集请求中工作?

时间:2016-06-07 作者:the.s.brom

我一直在学习一些构建前端注册/登录系统的教程。具体而言,此链接-http://cubiq.org/front-end-user-registration-and-login-in-wordpress

一切都很好,但是我对密码设置有问题。目前,注册后,系统使用Wordpress自己的注册码发送欢迎/创建密码电子邮件。单击带有登录名的电子邮件中的链接时(&A);输入GET,将运行以下函数:

function custom_login_init () {
$action = isset($_REQUEST[\'action\']) ? $_REQUEST[\'action\'] : \'login\';

if ( isset( $_POST[\'wp-submit\'] ) ) {
    $action = \'post-data\';
} else if ( isset( $_GET[\'reauth\'] ) ) {
    $action = \'reauth\';
} else if ( isset($_GET[\'key\']) ) {
    $action = \'resetpass-key\';
}

// redirect to change password form
if ( $action == \'rp\' || $action == \'resetpass\' ) {
    wp_redirect( home_url(\'/member-login/?action=resetpass\') );
    exit;
}

// redirect from wrong key when resetting password
if ( $action == \'lostpassword\' && isset($_GET[\'error\']) && ( $_GET[\'error\'] == \'expiredkey\' || $_GET[\'error\'] == \'invalidkey\' ) ) {
    wp_redirect( home_url( \'/member-login/?action=forgot&success=wrongkey&error=\'.$_GET[\'error\'] ) );
    exit;
}

if (
    $action == \'post-data\'        ||            // don\'t mess with POST requests
    $action == \'reauth\'           ||            // need to reauthorize
    $action == \'resetpass-key\'    ||            // password recovery
    $action == \'logout\'                         // user is logging out
) {
    return;
}

wp_redirect( home_url( \'/member-login/\' ) );
exit;
}
add_action(\'login_init\', \'custom_login_init\');
这使得重置/设置密码过程在很大程度上可以自行运行,但它最终会将用户重定向到“设置密码”表单,我认为该表单需要包含带有登录名和密钥的隐藏字段。

<h1 class="entry-title">Set Your Password</h1>
    <p>Fill out the form below to set your password.</p>
    <form name="resetpasswordform" action="<?php echo site_url(\'wp-login.php?action=resetpass\', \'login_post\') ?>" method="post">
        <input type="hidden" id="user_login" name="rp_login" value="<?php echo esc_attr( $_REQUEST[\'login\'] ); ?>" autocomplete="off" />
        <input type="hidden" name="rp_key" value="<?php echo esc_attr( $_REQUEST[\'key\'] ); ?>" />
        <p class="form-password">
            <label for="pass1">New Password</label>
            <input class="text-input" name="pass1" type="password" id="pass1">
        </p>
        <p class="form-password">
            <label for="pass2">Confirm Password</label>
            <input class="text-input" name="pass2" type="password" id="pass2">
        </p>

        <input type="hidden" name="redirect_to" value="/user/?action=resetpass&success=1">
        <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" value="Get New Password" /></p>
    </form>
然而,我不知道从何处获取表单字段的这些内容-我看不到它们被设置到cookie中,它们当时没有通过get或POST传递,一旦到达重定向,它们似乎就会从查询字符串中删除。。。

昨天我在google上搜索了很多信息,但似乎找不到最新的信息。

有人能解释一下这个过程是如何运作的吗?你看到我在函数或表单中缺少的东西了吗?

1 个回复
SO网友:the.s.brom

因为我找不到这个问题的答案,所以我自己通过在函数中设置自己的cookie并进行检查来处理它。以下是修改后的功能:

function custom_login_init () {
$action = isset($_REQUEST[\'action\']) ? $_REQUEST[\'action\'] : \'login\';

if ( isset( $_POST[\'wp-submit\'] ) ) {
    $action = \'post-data\';
} else if ( isset( $_GET[\'reauth\'] ) ) {
    $action = \'reauth\';
} else if ( isset($_GET[\'key\']) ) {
    $date_of_expiry = time() + 60 ;
    setcookie( "key", $_GET[\'key\'], $date_of_expiry );
    setcookie( "login", $_GET[\'login\'], $date_of_expiry );
    $action = \'resetpass-key\';
}

// redirect to change password form
if ( $action == \'rp\' || $action == \'resetpass\' ) {
    wp_redirect( home_url(\'/member-login/?action=resetpass\') );
    exit;
}

// redirect from wrong key when resetting password
if ( $action == \'lostpassword\' && isset($_GET[\'error\']) && ( $_GET[\'error\'] == \'expiredkey\' || $_GET[\'error\'] == \'invalidkey\' ) ) {
    wp_redirect( home_url( \'/member-login/?action=forgot&success=wrongkey&error=\'.$_GET[\'error\'] ) );
    exit;
}

if (
    $action == \'post-data\'        ||            // don\'t mess with POST requests
    $action == \'reauth\'           ||            // need to reauthorize
    $action == \'resetpass-key\'    ||            // password recovery
    $action == \'logout\'                         // user is logging out
) {
    return;
}

wp_redirect( home_url( \'/member-login/\' ) );
exit;
}
add_action(\'login_init\', \'custom_login_init\');
如果有人能想出更好的方法,我仍将不胜感激。

相关推荐

I can't recover my password

你能解释一下下面这行代码是什么意思吗?if ( isset( $_COOKIE[ $rp_cookie ] ) && 0 < strpos( $_COOKIE[ $rp_cookie ], \':\' ) ) { 这是因为我发现这就是我的代码发现故障的地方,并且无法正确设置密码。UPDATE:电子邮件发送到页面后,下面的选择将置为False,然后以$user=False;?结束,这是正常的?if(isset($\\u COOKIE[$rp\\u COOKIE])&&a