Я хочу аутентифицировать пользователей WP, используя мой собственный сервис аутентификации, написанный на Node.У меня есть пользователи, сохраненные в таблице wp_users
.Их пароли хешируются с помощью метода Phpass от WordPress.Когда пользователь пытается войти в свою учетную запись, WP использует метод CheckPassword()
и возвращает логическое значение true
/ false
, если пароль совпадает или нет.
Теперь я хочу использовать Node для сравнения пользователей.пароль к хешу WP.Я нашел модуль node-phpass в NPM, который должен обеспечивать алгоритм Phpass для хэширования пароля.
Все хорошо, пока я не использую международные символы.Вот пример:
В WP я устанавливаю пароль следующим образом и получаю хеш:
P: alamakota
H: $P$BSrncAWIY2KU7waUGLzayaon6v3gKU1
Когда я пытаюсь войти в систему, WP говорит «Все хорошо, заходите, чувак»
Теперь я беру хэш и пытаюсь проверить его с помощью модуля node-phpass:
const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword('alamakota', '$P$BSrncAWIY2KU7waUGLzayaon6v3gKU1');
console.log(valid); // => true
и там написано «Круто, пароль совпадает!»
Работает отлично и в другом направлении.
Теперь, где жепроблема возникает, спросите вы?Здесь:
Ситуация почти точно такая же, как и раньше, но я введу символ ą
в пароль и хеширую его, используя WP:
P: alamakotą
H: $P$B6kY.rneyNwdPvAgd0lDq6oYv82XOd1
Опять же, при проверке с использованием WP появляется «Пароль совпадает. Входите.»
К сожалению,когда я пытаюсь сравнить пароль с помощью node-phpass, он говорит «Извините, чувак, вы не пройдете» :
const hasher = new PasswordHash(8, true, 7);
const valid = hasher.CheckPassword('alamakotą', '$P$B6kY.rneyNwdPvAgd0lDq6oYv82XOd1');
console.log(valid); // => false
Он также не работает по-другому.
Почему это так?Почему я не могу использовать хеш WP в Node.js, когда в пароле есть международные символы?
ОБНОВЛЕНИЕ:
Я только что обнаружил, что PHP md5()
function and JS'es crypto.createHash('md5')
не возвращает тот же хэш, когда во входной строке есть международные символы.Есть ли какое-то решение для этого?