# 接続されたクライアントからAPI経由で既存のユーザーを更新または作成する最良の方法は？

**URL:** https://meta.discourse.org/t/best-way-to-update-or-create-existing-user-via-api-from-connected-client/256528
**Category:** Development
**Tags:** rest-api
**Created:** [2023 年 2 月 28 日午後 6:33 UTC](https://meta.discourse.org/t/best-way-to-update-or-create-existing-user-via-api-from-connected-client/256528 "2023-02-28T18:33:27Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![aaronbauman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/aaronbauman/32/204191_2.png) [@aaronbauman](https://meta.discourse.org/u/aaronbauman)
#### Post date: [2023 年 2 月 28 日午後 6:33 UTC](https://meta.discourse.org/t/best-way-to-update-or-create-existing-user-via-api-from-connected-client/256528/1 "2023-02-28T18:33:27Z")

</div>

以下は、多くの人が直面したであろうユースケースです。

- Discourse に多数のユーザーがいる
- API を使用して Discourse ユーザーを作成し、グループメンバーシップを管理する外部システム（サービスプロバイダー、Drupal）がある
- Drupal には重複するユーザーセットがある。つまり、同じメールアドレスを持つユーザーが Discourse と Drupal に存在しますが、リンクされていません
- ユーザーが SSO を使用して Discourse にアクセスせず、代わりにメールに依存する場合があるため、Drupal は API を使用してユーザー、グループ、およびメンバーシップを同期します

## 現在の動作：

- Discourse は、同じメールアドレスを持つ Discourse ユーザーが既に存在するため、Discourse ユーザーを作成する API 呼び出しを拒否することがあります。

## 望ましい動作：

- Discourse は、メールを介して既存の Discourse ユーザーを Drupal ユーザーにリンクします。

## 提案される解決策：

- マッチするメールアドレスを持つユーザーを取得するために、Discourse の `/admin/users/list/all.json?email=$email` API エンドポイントをクエリします。
- マッチするユーザーが存在する場合
  - 既存のユーザーを接続します（Drupal 側）。

- それ以外の場合
  - 新しい Discourse ユーザーを作成します。

## 質問

- これは妥当な解決策のように思えますか、それともより良い方法がありますか？
- API クエリは正しく形成されていますか？
- `all.json` も `email` クエリ文字列パラメータも文書化されておらず、例はほとんど見つかりませんでしたが、[この記事](https://meta.discourse.org/t/use-the-api-to-find-a-username-based-on-an-email/45424/5) はそれが最善の方法であることを示しているようです。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2023 年 2 月 28 日午後 8:14 UTC](https://meta.discourse.org/t/best-way-to-update-or-create-existing-user-via-api-from-connected-client/256528/2 "2023-02-28T20:14:31Z")

</div>

> [@aaronbauman](#):
>
> - これは妥当な解決策のように思えますか、それとももっと良い方法がありますか？

私は皆さんのような専門家ではありませんが、そうだと思います。

> [@aaronbauman](#):
>
> APIクエリは正しく形成されていますか？

私にはそう_見えます_。常に最新の状態である最良のドキュメントは、[Discourse APIのリバースエンジニアリング](https://meta.discourse.org/t/reverse-engineer-the-discourse-api/20576)です。
