1

私が理解しているように、オブジェクトをcouchdbで更新するには. 同じIDの新しいリビジョンを実際に「挿入」しているため、オブジェクト全体を送り返す必要があります。これはすべてき​​れいで、非常にうまく機能します。

しかし、問題が発生しました。どのように処理すればよいかわかりません。ユーザーに完全に送信できないオブジェクトがあります。パスワード ハッシュなどの特定の情報を非表示にする必要があります。

データはクライアントに送信され、リビジョンも送信されます。オブジェクトを更新しようとすると、1 つの問題が発生します。一部のデータが欠落しているため、更新によりユーザーから欠落している属性が消去されます。

つまり、私が持っている最も簡単な方法は、couchdb からオブジェクトを取得し、id と rev が一致するかどうかを確認することです。一致する場合は、欠落している属性を持つオブジェクトをマージします。それはかなりうまく機能し、属性の削除もサポートできます。

次に、この手法を使用して、データベースから頻繁にオブジェクトをクエリする時間を短縮するキャッシュにオブジェクトを追加できます。オブジェクトを更新できる場合は、その ID のキャッシュをクリアします。オブジェクトが新しい場合は、エラーを処理するか、オブジェクトをマージする必要があります。

この問題を処理するためのより良い「良い方法」はありますか?

編集

一晩中考えた後、はるかに優れた解決策を見つけたと思います。プロファイル内にユーザー名とパスワードを含める代わりに。識別オブジェクトを使用プロファイルから分離します。

言い換えれば、物事を分離しておくために、オブジェクトを可能な限り分割する必要があります...プラス面としては、プロファイル自体をいじることなく、1 つのプロファイルに複数の認証を追加できます。秘密のオブジェクトを返すことなく、プロファイルや必要なものを返すことができます。

挿入のロジックが少し複雑になりますが、非常に簡単なはずです...

  1. uuid API「_uuids」を使用して、couchdb から 1 つの ID を取得します
  2. そのuuidを使用してパスワード認証(ユーザー名、パスワード、profile_id)を挿入します
  3. 成功したら、1 で取得した uuid を使用してプロファイルを挿入します

何か問題が発生した場合は、ロールバックしてユーザーに何が問題なのかを伝えます。

また、この方法の良い点は、プロファイル ID を使用して oauth2 の access_token を追加できることです。ロジックはパスワードとほぼ同じです。認証タイプは異なりますが、どの認証タイプもほぼ同じように機能するはずです。

4

1 に答える 1