Wp_set_password()包含撇号后的问题

时间:2015-10-14 作者:Sam

因此,我们在WP中使用了一些自定义内容,其中之一是PW恢复表单。我们在内部使用它来设置密码

wp_set_password($password, $userId)
最近,我们发现包含撇号字符的密码有问题"

使用此设置密码将使用户无法使用刚才设置的相同密码登录。我们没有在登录过程中应用任何内容,我可以验证在wp_set_password() 函数以及登录表单。

任何关于我可以在哪里查找潜在错误的指针都会很好。感谢您抽出时间。

Update 1

使用wp_signon() 用户可以使用密码登录Test"123

使用wp-login.php?page=login 并输入密码Test"123 不起作用

目前正在寻找所有可能干扰此功能的过滤器。。。

Update 2

在我看来,这像是一个未记录的wordpress功能/bug?

所有插件都已停用。未修改的主题twentefifteen 已使用。使用更改密码wp_set_password() 更改数据库中的PW。但是,使用密码"\' 将导致您无法使用登录wp-login.php. 它将给您提供无效凭据错误。

但是,使用相同的登录数据和wp_signon() 它起作用了。我只是不知所措,可能正在转发到wp bug论坛。

Update 3

我正在使用这个插件来重置和测试登录。

function resetLogin() {
//    wp_set_password(\'Test"123\', 1);
    wp_update_user([
        \'ID\' => 1,
        \'user_pass\' => \'Test"123\'
    ]);
}
//add_action(\'after_setup_theme\', \'resetLogin\');

function testLogin() {
    var_dump(wp_signon([
        \'user_login\' => \'admin\',
        \'user_password\' => \'Test"123\',
        \'remember\' => true
    ], false));
}
//add_action(\'after_setup_theme\', \'testLogin\');
为了测试,我在add\\u action-resetLogin中添加了一次注释,并在页面上执行任何操作之前立即将其停用。然后,这会立即中断wp登录时的登录。php

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

解决方案非常简单。这些功能要求正确转义密码。所以

Instead of this:

wp_set_password(\'Test"123\', $userId);

You have to do this:

wp_set_password(wp_slash(\'Test"123\'), $userId);
这同样适用于wp_update_user()wp_signon(). 可以从此错误报告中看到有关文档的更多信息和更新:

SO网友:ThemesCreator

我不确定这是否正是发生在你身上的事情,但这是法典关于wp\\u set\\u password()的内容:

请注意:此功能应谨慎使用,实际上仅适用于一次性应用。如果不采取预防措施确保密码不会在每次页面加载时执行,那么在插件或主题中不正确地利用这一点可能会导致无休止的密码重置循环。

https://developer.wordpress.org/reference/functions/wp_set_password/

我认为你应该只使用它来重置密码,然后删除它。

相关推荐

How to change password

我有一个博客。我的电脑几个月前死机了,我的用户名是admin 我试图恢复我的密码,但由于密码丢失,创建一个新的密码,他们发送了一个巨大的长地址密码,不允许我复制,我只是不知道该怎么办。我最近再次支付了网站托管费用,无法使用我的仪表板。