# api\_username 制限が新たに施行されましたか？

**URL:** https://meta.discourse.org/t/newly-enforced-api-username-restriction/168295
**Category:** Development
**Tags:** rest-api
**Created:** [2020 年 10 月 26 日午後 3:51 UTC](https://meta.discourse.org/t/newly-enforced-api-username-restriction/168295 "2020-10-26T15:51:13Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Justin\_Powell](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin_powell/32/198131_2.png) [@Justin\_Powell](https://meta.discourse.org/u/Justin_Powell)
#### Post date: [2020 年 10 月 26 日午後 3:51 UTC](https://meta.discourse.org/t/newly-enforced-api-username-restriction/168295/1 "2020-10-26T15:51:13Z")

</div>

当社のアプリケーションでは、すべてのユーザーに対してグローバルな API キーを使用しています。ユーザーがサインインしていない場合のコンテキストを表すために、仮想ユーザー名（存在しないユーザー）`anonymous` を使用していました。これは 2020 年 10 月 25 日午前 12:39（中部標準時）まで 3 年以上問題なく機能していました。

本日、そのユーザー名を持つユーザーを作成することで回避策を講じました。今週末に制限が導入されたのでしょうか？それとも API の更新によるものでしょうか？

これにより、すべての公開ユーザーがコメントを表示できなくなりました。回答をいただければ幸いです。

よろしくお願いいたします。

Justin

---

<div class="post-metadata">

### Author: ![Justin\_Powell](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/justin_powell/32/198131_2.png) [@Justin\_Powell](https://meta.discourse.org/u/Justin_Powell)
#### Post date: [2020 年 10 月 26 日午後 4:10 UTC](https://meta.discourse.org/t/newly-enforced-api-username-restriction/168295/2 "2020-10-26T16:10:37Z")

</div>

エラーは以下の通りです…

 ![Log Search 2020-10-26 10-59-01](https://global.discourse-cdn.com/meta/original/3X/a/4/a4a8baf6032905cd1e7367e560818f20aca5e00d.png)

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [2020 年 10 月 29 日午後 12:12 UTC](https://meta.discourse.org/t/newly-enforced-api-username-restriction/168295/3 "2020-10-29T12:12:53Z")

</div>

最近、この挙動を変更するような変更があったとは認識していません。以前からこのように動作していた（ユーザーが見つからない場合はエラーを表示する）と認識していました。これは、API 認証情報からユーザー名を読み取れるかを確認する[コード](https://github.com/discourse/discourse/blame/master/lib/auth/default_current_user_provider.rb)です。

 ![image](https://global.discourse-cdn.com/meta/original/3X/a/4/a42c928c5f6219b849a5940922dab8022050ec2a.png)

そして、以下の `user` は存在しないため `nil` となり、それが 131 行目で上記のエラーメッセージを発生させます。

 ![image](https://global.discourse-cdn.com/meta/original/3X/7/4/746ccfdd900646c960bc7572f0ff3db289359003.png)

23 日前に変更が行われましたが、それはあなたの状況には適用されず、いずれにせよ異なるエラーメッセージを返します。

念のため確認しましたが、1 年以上前の[このコミット](https://github.com/discourse/discourse/commit/dc9110cc434b0c0f3d6bec8d992c6caea31e273c)を使用してローカルの Discourse を設定し、存在しないユーザーを使用すると、同じエラーが発生しました。

このことから良い点として、現在 API スコープが導入されているため、ユーザーが `read` アクセスのみを必要とする場合、その API キーを「全アクセス」キーではないように更新できます。

---

<div class="post-metadata">

### Author: ![riking](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/riking/32/170938_2.png) [@riking](https://meta.discourse.org/u/riking)
#### Post date: [2020 年 10 月 29 日午後 12:21 UTC](https://meta.discourse.org/t/newly-enforced-api-username-restriction/168295/4 "2020-10-29T12:21:20Z")

</div>

公開サイトの場合、匿名表示を取得するために、認証なしでバックエンドからこれらのリクエストを送信できるはずです。レート制限が問題となる場合は、実際のダミーユーザーを使用する必要があります。

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [2020 年 10 月 29 日午後 12:30 UTC](https://meta.discourse.org/t/newly-enforced-api-username-restriction/168295/5 "2020-10-29T12:30:14Z")

</div>

もう一つ思い出したのですが、`revoke api keys days` というサイト設定についてです。そのユーザーが存在しないため、そのキーの最終使用日は更新されず、おそらくキーは自動的に無効化されたのでしょう？しかし、そもそもどのようにして有効なリクエストを行えたのか、いまだに不明です。
