password_verify не работает в oops [duplicate]

Этот код будет делать то, что вы хотите (если вы хотите поменять выбранный с помощью первого дочернего элемента). Если вам нужно что-то еще, вам нужно быть более точным.

  & lt; script type = "text / javascript" & gt;  function swapDiv (event, elem) {elem.parentNode.insertBefore (elem, elem.parentNode.firstChild);  } & lt; / script & gt;  & lt; div id = "container" & gt;  & lt; div onclick = "swapDiv (событие, это);" & gt; 1 & lt; / div & gt;  & lt; div onclick = "swapDiv (событие, это);" & gt; 2 & lt; / div & gt;  & lt; div onclick = "swapDiv (событие, это);" & gt; 3 & lt; / div & gt;  & Lt; / дел & GT;   
10
задан Cbas 23 December 2014 в 02:41
поделиться

4 ответа

Нашел проблему. когда я это сделал:

echo strlen($hash)

он напечатал 90, что странно, потому что в конце концов не было пробелов, когда я печатал сообщение об успехе / неудаче, а поле имеет длину varchar 255

Я добавил эту строку:

$hash = substr( $hash, 0, 60 );

И теперь он отлично работает.

Странно, что никто больше не сталкивался с этой проблемой. Есть похожие сообщения о password_verify, но ни один из них не требовал такого преобразования или любого преобразования:

php password_verify not working

password_verify php не соответствует

http://forums.phpfreaks.com/topic/283407-need-help-with-password-verify/

Использование функции password_hash и password_verify с помощью PHP 5.5

Меня беспокоит то, что это не позволяет переходить на совместимость с кодом. Как я узнаю, что хэш имеет длину 60 символов, когда по умолчанию изменяется?

11
ответ дан Community 17 August 2018 в 12:30
поделиться
  • 1
    Это действительно не обязательно. Вы уверены, что это поле varchar, а не char *? Возможно, вы также можете взглянуть на эту небольшую статью об использовании UTF-8 для Php (кодирования) и базы данных (charset). Может быть интересен код, который вставляет хэш в базу данных. – martinstoeckli 23 December 2014 в 11:09
  • 2
    добавив к вкладкам @martinstoeckli, было бы лучше использовать тип данных CHAR для поля хэшированного пароля в базе данных и установить 60 как его длину при использовании константы PASSWORD_BCRYPT. В этом случае хэш всегда будет содержать 60 символов. – Ashesh Kumar Singh 15 April 2015 в 07:12
  • 3
    Ваши ссылки на другие решения привели меня к ответу. Благодаря! В частности, это было «password_verify not working». которые привели меня к моему решению. – Timothy Steele 13 March 2016 в 07:07
  • 4
    @Cbas У меня была та же проблема. Я попробовал trim ($ hash) вместо substr (), и он работает! – otrebla 8 April 2016 в 04:05

У меня была такая же проблема, и она все еще не работала, несмотря на то, что мои столбцы базы данных были varchar (255), что хеши были 60 символов, и обеспечение моей кодировки было UTF-8 на всем протяжении. Я довольно новичок в PHP и SQL, поэтому я не буду притворяться, что понимаю, почему это сработало, но мне удалось это исправить, поэтому я надеюсь, что этот пост поможет другим людям с той же проблемой.

Оказалось, что основная причина, по которой password_verify () не проверяла мои хэши, состояла в том, что я сделал подготовленный оператор, который использовал хранимую процедуру ранее в скрипте, не выбирая все результаты запроса должным образом очистите буфер, перед закрытием и повторным подключением для выполнения следующего запроса. Вызов next_result () в mysqli_link после закрытия инструкции будет гарантировать, что любые результаты будут использованы. Кроме того, я использовал другой подготовленный оператор с хранимой процедурой, чтобы сделать вставку для пароля, но мне все еще нужно было делать вызовы store_result () и free_result (), даже если из вставки не были возвращены результирующие наборы. Я предполагаю, что комбинация этих вещей искажала мои данные где-то вдоль линии, в результате чего password_verify () возвращал false на, казалось бы, идентичные хэши.

Этот ответ был для другого но я счел это полезным для изучения того, как правильно закрыть подготовленные заявления с помощью хранимых процедур.

0
ответ дан DBC 17 August 2018 в 12:30
поделиться

Только для справок в будущем. У меня была такая же проблема, что и пароли без причины. Когда я внимательно посмотрел на него, я увидел, что поле пароля в базе данных было недостаточно большим для хранения полного хеша, поэтому некоторые символы были отключены. После увеличения размера поля базы данных он работал отлично.

2
ответ дан Kobus 17 August 2018 в 12:30
поделиться

У меня была та же проблема, с которой у вас была работа, по какой-то причине кажется, что она помещает в код код:

$hash = substr( $hash, 0, 60 );

, хотя моя строка длиной уже 60 символов.

2
ответ дан Lexix 17 August 2018 в 12:30
поделиться
Другие вопросы по тегам:

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