Я использую Redbean как ORM для своего php-приложения.
Каждый пользователь (сотрудник в этой ситуации) должен иметь пароль для входа в систему, и я думал, что я бы сгенерировал его для них, поэтому им не нужно вводить его в форме.
Очевидно, это означает, что все они должны иметь соль, и единственным сохраненным паролем должно быть хеш-значение фактического пароля. Из-за этого я должен отправить пароль пользователю (иначе они не будут знать его: D) и, следовательно, должны иметь его как свойство объекта, не сохраняя его для базы данных.
Умное место для генерации паролей было бы в модели, так что она в основном делает это сама по себе для каждого нового сотрудника (пользователя), поэтому я создал эту модель:
class Model_employee extends RedBean_SimpleModel { public function dispense() { $this->salt = cypher::getIV(32); $this->tempPassword = cypher::getIV(8); $this->password = md5($this->salt . $this->password); } public function update() { unset($this->tempPassword); } }
Генерирующий пароль в dispense()
работает нормально. Предполагается, что update()
запускается непосредственно перед сохранением компонента и, следовательно, он (если я уничтожу его свойство как null), тем не менее, tempPassword сохраняется, даже если я его отключил (столбец также созданный, даже если я сохраню его как null).
В принципе, вопрос сводится к следующему: как мне избавиться от свойства tempPassword
, чтобы он не был сохранен в базе данных?
Оказывается, кто-то еще спросил этот точный вопрос пару дней назад на форуме readBean .
В принципе, redbean не будет хранить частные свойства любого расширения класса.
Решение было довольно простым:
class Model_employee extends RedBean_SimpleModel { private $tempPassword; public function dispense() { $this->salt = cypher::getIV(32); $this->tempPassword = cypher::getIV(8); $this->password = md5($this->salt . $this->password); } }
Это не сохранит пароль в базе данных и не создаст столбец. Конечно, я должен добавить getter (), если я хочу прочитать пароль, но выше решает ближайшую проблему 🙂