Laravel Observers - обновленные триггеры запускаются бесконечно и выдают ошибку bcryptPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Laravel Observers - обновленные триггеры запускаются бесконечно и выдают ошибку bcrypt

Сообщение Anonymous »

Я столкнулся с ошибкой, которую мне хотелось бы объяснить. У меня есть UserObserver, и каждый раз, когда пользователь обновляется и активное поле обновляется до истинного, генерируется новый пароль и отправляется приветственное электронное письмо.

функция выглядит следующим образом.

public function updated (User $user)
{
if ($user->active && $user->isDirty('active')) {
$password = generatePassword();
$user->password = bcrypt($password);
$user->save();

$user->notify(
new UserWelcomeNotification(
$user->email,
$password,
new MailResource(Email::getMailInfo(23))
)
);
}
}


Как вы можете видеть в операторе if, есть проверка, активен ли пользователь и было ли изменено поле базы данных (isDirty()). Если это правда, генерируется новый пароль, хешируется с помощью bcrypt и затем отправляется пользователю через уведомления. (mail)

Как и ожидалось, обновление пароля снова запускает метод, но теперь isDirty('active) должен возвращать false. Этого не происходит, он возвращает true на всех итерациях. После достижения максимального времени выполнения PHP я получаю следующую ошибку:


[Пятница, 11 января, 09:13:13 2019] PHP Fatal ошибка: превышено максимальное время выполнения
60 секунд в
app/src/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php

После включения xdebug выдается следующее исключение. (как и ожидалось)


Ошибка PHP: достигнут максимальный уровень вложенности функций «256», прерывание!
в
/home/ilyas/script/ clockwork/app/src/vendor/laravel/framework/src/Illuminate/Support/Collection.php
в строке 1971


Из этой проблемы, которую можно легко решить, у меня есть 2 вопроса.

Почему bcrypt выдает ошибку после достижения максимального времени выполнения достигнуто?

Почему $user->isDirty('active') возвращает true после каждого обновления в этом цикле, хотя последнее обновление в наблюдателе не обновили активное поле?

По запросу Mozammil $user->getDirty() возвращает это при первом использовании обновленного метода сработало.

array(2) {
'active' =>
bool(true)
'updated_at' =>
string(19) "2019-01-11 11:27:13"
}


Со второго раза он возвращается до тех пор, пока не истечет время ожидания:

array(3) {
'password' =>
string(60) "$2y$10$rlAbpelKnT/yp5zFhXcjwelEKkDEx5SfNJWqL1LiDltRnHYBLINmK"
'active' =>
bool(true)
'updated_at' =>
string(19) "2019-01-11 11:27:13"
}


Подробнее здесь: https://stackoverflow.com/questions/541 ... crypt-erro
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Kotlin/Android Collectors/ Observers не находят никаких изменений за пределами класса
    Anonymous » » в форуме Android
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Все ремесленные команды Laravel выдают ошибку: черта «Laravel\Prompts\Concerns\Themes» не найдена
    Anonymous » » в форуме Php
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Laravel Api не показывает обновленные данные
    Anonymous » » в форуме Php
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Запросы Laravel 11 Sanctum от React выдают 400 ошибок
    Anonymous » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Запросы Laravel 11 Sanctum от React выдают 400 ошибок
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»