gpt4 book ai didi

php - 不将 php-redbean 的属性保存到数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:28:35 26 4
gpt4 key购买 nike

我正在使用 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 仍然保存,即使我取消设置它(该列也被创建,即使我将它存储为 null)。

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

最佳答案

事实证明,几天前有人在 readBean forum 中问过这个问题.

基本上,redbean 不会存储任何类扩展的私有(private)属性。

解决方案非常简单:

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

关于php - 不将 php-redbean 的属性保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17869584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com