web-dev-qa-db-ja.com

アポストロフィを含むwp_set_password()の後の問題

それで、私たちはWPでいくつかのカスタムなことを使っています、そしてそのうちの1つはPW-Recoveryフォームです。これを内部的に使用して、パスワードを次のように設定します。

wp_set_password($password, $userId)

最近、アポストロフィ文字"を含むパスワードで問題が発生しました

これでパスワードを設定すると、設定したパスワードと同じパスワードを使用してログインできなくなります。ログインプロセスには何も適用していません。正しいパスワードがwp_set_password()関数とログインフォームに入力されていることを確認できます。

どこで私が潜在的なエラーを探すことができるかに関するどんなポインターでも素晴らしいでしょう。お時間をいただきありがとうございます。

アップデート1

wp_signon()を使用すると、ユーザーはパスワードTest"123を使用してログインできます。

wp-login.php?page=loginを使用してパスワードTest"123を入力しても機能しません

現在潜在的にこれと干渉する可能性があるすべてのフィルタを探しています...

アップデート2

文書化されていないワードプレス機能/バグのように私に見えますか?

すべてのプラグインは無効になっています。変更されていないテーマtwentefifteenが使用されています。 wp_set_password()を使用してパスワードを変更すると、データベース内のPWが変更されます。しかし、"または'でパスワードを使用すると、wp-login.phpを使用してログインするにはcannotになります。それはあなたに無効な認証情報エラーを与えるでしょう。

しかし、同じログインデータとwp_signon()を使ってもうまくいきます。私は無知です、おそらくwpバグフォーラムに転送します。

アップデート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_action - resetLoginにコメントしています。そしてページで何かをする前にすぐにそれを再び無効にします。これはすぐにwp-login.phpのログインを中断します

3
Sam

解像度はかなり簡単です。これらの機能では、パスワードを適切にエスケープする必要があります。そう

これの代わりに:

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

あなたはこれをしなければならない:

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

wp_update_user()wp_signon()についても同じことが言えます。ドキュメントに関するさらなる情報と更新は、このバグレポートから見ることができます。

6
Sam

これがまさにあなたに起こっていることかどうか私にはわかりませんが、これはコーデックスがwp_set_password()について言っていることです:

注意してください:この機能は控えめに使用されるべきであり、本当に一度だけの適用のために意図されています。プラグインやテーマでこれを不適切に利用すると、ページが読み込まれるたびに実行されないように予防策を講じないと、パスワードリセットが無限に繰り返される可能性があります。

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

パスワードをリセットしてそれを削除するためだけに使うべきだと思います。

1
ThemesCreator