2

我使用 Redbean 作为我的 php 应用程序的 ORM。

每个用户(这种情况下的员工)都必须有密码才能登录,我想我会为他们生成一个密码,所以他们不必在表单中输入密码。

显然,这意味着它们都必须有一个盐,并且唯一存储的密码应该是实际密码的哈希值。因此,我必须将密码发送给用户(否则他们不会知道它: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()保存bean之前运行,所以它是(如果我将属性设置为null,它会保存为null),但是,tempPassword仍然保存,即使我取消设置它(列也被创建,即使我将其存储为空)。

基本上,问题归结为:如何摆脱该tempPassword属性,使其不保存到数据库中?

4

1 回答 1

2

事实证明,几天前有人在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(),但上面解决了眼前的问题:)

于 2013-07-25T22:15:27.130 回答