Как реализовать password_hash и password_verify в моем PHP-коде [duplicate]

Я знаю, что это старый пост, но я подумал, что это может помочь кому-то, кто спотыкается.

Пока вы не назначаете объект ни к чему, он не поддерживает ссылка в памяти. Поэтому, чтобы создать объект, который вы хотите разделить между другими объектами, вам нужно создать такую ​​фабрику:

var a = function(){
    return {
        father:'zacharias'
    };
},
b = a(),
c = a();
c.father = 'johndoe';
alert(b.father);
1
задан edigu 9 March 2015 в 08:04
поделиться

1 ответ

При регистрации вы получаете пароль от пользовательского ввода и генерируете его с помощью password_hash() :

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);

Вы можете предоставить ему обычную соль для использования в третий параметр, но документация рекомендует не делать этого:

Внимание. Настоятельно рекомендуется, чтобы вы не генерировали свою соль для этой функции. Он автоматически создаст безопасную соль для вас, если вы ее не укажете.

Вы сохраняете этот хэш в базе данных. Убедитесь, что вы поместите его в поле CHAR / VARCHAR из символов 60 или дольше.

Когда пользователь хочет войти в систему, вы проверяете пароль, который они вводили против ранее сохраненного хеша, используя password_verify() :

$auth = password_verify($_POST['password'], $hash);

Конечно, вы получите правильное значение $hash из базы данных, выполнив поиск по указанному имени пользователя.

Если $auth - TRUE, тогда предоставленный пароль соответствует его хэшу, вычисленному при регистрации, и пользователь аутентифицируется.

6
ответ дан axiac 21 August 2018 в 07:50
поделиться
  • 1
    Как бы вы выполняли поиск db учетной записи пользователя, предполагая, что в базе данных есть поля «имя пользователя» и «user_pass». Используйте сотни пользователей с уникальным «user_name» (уникально проверяется при регистрации пользователя). Вы не можете искать по условию user_name и user_pass. Вы не можете использовать password_verify, потому что не знаете правильную запись для выбора (предположите, что могут быть дублированные пароли, но у каждого есть другое имя пользователя). Итак, вам нужно запросить имя пользователя, а затем просмотреть результаты 1+ для проверки пароля? Благодарю. – Rick Hellewell 14 March 2017 в 03:55
  • 2
    Вы сказали во втором предложении: «Предположим, что сотни пользователей с уникальным« user_name »& quot; . При поиске по 'user_name' вы либо находите одну запись в базе данных, либо не найдете ее. Создайте столбец UNIQUE INDEX в столбце «имя_пользователя» в базе данных, чтобы ускорить его работу и обеспечить уникальность. – axiac 14 March 2017 в 08:01
Другие вопросы по тегам:

Похожие вопросы: