2

PHP アプリケーションの ORM として Redbean を使用しています。

すべてのユーザー (この状況では従業員) は、ログインするためにパスワードを持っている必要があります。

明らかに、これはすべてにソルトが必要であることを意味し、保存されるパスワードは実際のパスワードのハッシュ値のみである必要があります。そのため、パスワードをユーザーに送信する必要があり (そうしないと、ユーザーはそれを知りません: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

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 に答える