2013-07-25 15 views
2

我使用Redbean作为我的php应用程序的ORM。不保存php-redbean数据库的属性

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

显然,这意味着它们都必须有一个salt,并且唯一存储的密码应该是实际密码的散列值。因此,我必须将密码发送给用户(否则他们不会知道它: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),但是,tempPassword仍然保存,即使我没有设置它(该列也被创建即使我将它存储为空)。

基本上,这个问题归结为:如何摆脱tempPassword属性,以便它不保存到数据库?

回答

2

事实证明,其他人刚刚问了几天前的确切问题,在readBean forum

基本上,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(),但上面的解决了眼前的问题:)