ホームページ  >  に質問  >  本文

ログインユーザーのIDをKeystoneJS外部キーフィールドに自動的に追加

KeystoneJS フレームワークによって提供されるドキュメントを使用してアプリケーションを作成しています。したがって、私のアプリケーションには 2 つのテーブルがあり、1 つは users で、もう 1 つは posts です。それで、管理領域にログインして投稿を作成すると、外部キー列のあるフィールドがあり、そのフィールドは空で、ユーザーテーブルの外部キー値が入力されるのではないかと思います。したがって、KeystoneJS でログインしているユーザーの ID を使用して新しい投稿を作成するとき、システムが自動的に外部キー値を author に追加するようにしたいと考えています。

そこで、解決策を探してあちこち探しましたが、適切な解決策を見つけることができませんでした。

何かご意見がございましたら、ご回答いただければ幸いです。

######ありがとう######
P粉239164234P粉239164234401日前629

全員に返信(1)返信します

  • P粉949190972

    P粉9491909722023-09-15 10:10:38

    管理されたブログの例をご覧になりましたか?

    これには、プロジェクトと同様のリストがあります: Posts および Users (Contributors または Moderators)。あなたの場合、投稿者/管理者の区別は重要ではありません。Post リストのフック、特に resolveInput.createhook に興味があるでしょう。次のようになります:

    リーリー

    ドキュメントによると :

    したがって、保存する前に値を変更する機会です。これには、

    Post.author フィールドのような値を入力したり強制したりすることも含まれます。

    resolveInput#session オブジェクトへの参照を含む context オブジェクト を取得します。このオブジェクトの内容は、セッション ストレージ関数によって決定されますが、通常は現在のユーザーに関する情報が含まれています。この例では、ログインしているユーザーが貢献者の場合、context.session?.contributor?.id からその貢献者 ID を取得し、それを createdBy フィールドに保存します。同時に、createdAt フィールドも現在の日付と時刻に設定されます。

    このフックはリスト レベルで構成されているため、項目のデータ全体 (基本的には

    resolvedData オブジェクトとフックが必要とするその他の変更) を返す必要があることに注意してください。別の方法としては、フィールド レベルで resolvedData 関数を追加する方法がありますが、その場合は 2 つの別々の関数が必要になります。1 つは createdAt 用、もう 1 つは createdBy## 用です。 # - Every関数は単一の値を返します。この区別の詳細については、フック ガイドを参照してください。 さらに、フックと

    アクセス制御

    - つまり、そもそも投稿者に投稿の作成を許可するかどうかを混同しないことが重要です。この例では、アクセス制御はリストの access 構成で個別に構成されます。 最後の注意 - 執筆時点では、

    フック API ドキュメント

    では resolveInput フック (リスト レベルとフィールド レベルの両方) について説明していますが、それらをさまざまな操作に分割していません (つまり resolveInput.createresolveInput.update)。これは最近の構文の改良にすぎず、フックの使用方法は変わりません。ドキュメント内で API のみを使用する場合、上記のコードは次のように記述できます: リーリー

    返事
    0
  • キャンセル返事