それで、私たちは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のログインを中断します
解像度はかなり簡単です。これらの機能では、パスワードを適切にエスケープする必要があります。そう
これの代わりに:
wp_set_password('Test"123', $userId);
あなたはこれをしなければならない:
wp_set_password(wp_slash('Test"123'), $userId);
wp_update_user()
とwp_signon()
についても同じことが言えます。ドキュメントに関するさらなる情報と更新は、このバグレポートから見ることができます。
これがまさにあなたに起こっていることかどうか私にはわかりませんが、これはコーデックスがwp_set_password()について言っていることです:
注意してください:この機能は控えめに使用されるべきであり、本当に一度だけの適用のために意図されています。プラグインやテーマでこれを不適切に利用すると、ページが読み込まれるたびに実行されないように予防策を講じないと、パスワードリセットが無限に繰り返される可能性があります。
https://developer.wordpress.org/reference/functions/wp_set_password/
パスワードをリセットしてそれを削除するためだけに使うべきだと思います。