☠️

突然、YoutubeAPI等を実行すると「Method doesn't allow unregistered calle」エラーを吐いた原因

2023/12/01に公開

突然

YoutubeAPIGoogleMapApiを実行するとエラーを吐くように。

{
  "error": {
    "code": 403,
    "message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
    "errors": [
      {
        "message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
        "domain": "global",
        "reason": "forbidden"
      }
    ],
    "status": "PERMISSION_DENIED"
  }
}

{
  "error_message": "You must use an API key to authenticate each request to Google Maps Platform APIs. For additional information, please refer to http://g.co/dev/maps-no-account",
  "results": [],
  "status": "REQUEST_DENIED"
}

直前にした作業

下記のような感じで作業をしておりました。
※モデルクラスを作成して即時反映コマンドを叩いて…

php artisan make:model Live
php artisan migrate
php artisan cache:clear
php artisan config:cache

調査内容(空振り)

  • APIの実行上限が突破していないか → してない
  • OAuthが突然必要になるなどの仕様変更がないか → なさそう

調査内容(当たり)

  • Laravel外にて、curlコマンドで実行できるか → できた
  • 別PCに残っている、少し前のブランチではエラーが出ないか → 出ない
  • env("API_KEYなどの環境変数")は取得できるか → Nullになる

原因

php artisanが絡む作業をした後に、即時反映するために叩いていた下記のコマンド。

php artisan cache:clear
php artisan config:cache

https://qiita.com/emilia/items/746e1e5ec3487fc88c3e#本題env関数で値が取得できない理由

「設定ファイルがキャッシュされると、.envファイルはロードされなくなり、env関数の呼び出しは全てnullを返す」仕様らしいです。

ということで、全ての.envの内容がNullで帰ってくる状態になっていました。

解決

先程のサイトに記載の通りに、config/app.phpに下記を追加。
'google_api_key' => env('GOOGLE_API_KEY'),

下記コマンドを実行。

php artisan config:cache

下記を追記し、無事に解決しました。

+ $client->setDeveloperKey(config('app.google_api_key'));
- $client->setDeveloperKey(env('GOOGLE_API_KEY'));

反省

エラー文の一字一句を見逃さない。

下記は、先程のエラー文の一部です。

私はこれを読んで、APIの認証とかトークンとかその辺がおかしいのかなと思いました。
APIが不安定である?(登録の呼び出し元)。と言っているように聞こえたためです。

Method doesn't allow unregistered callers (callers without established identity).
このメソッドでは、未登録の呼び出し元(IDが確立されていない呼び出し元)を許可していません。

しかし、IDが確立されていない呼び出し元というのは、
真摯に向き合ってみると「API_KEYがNull」と言われていた事に気づけます。

試しに、API_KEYを適当に「gewdfwege」と入力して実行すると、
下記のようなエラーになります。

API key not valid. Please pass a valid API key.
APIキーが有効ではありません。有効なAPIキーを渡してください。

あとがき

次回からは、全体を読んで雰囲気を掴むのではなく、
一字一句からエラー文の声を聴き分けていこうと思います。

経験の問題もあると思うので、ある意味仕方ない部分もあるかもしれません。
知識が増えたので次に同じようなパターンに出会ったときに解決できるかが楽しみです。

Discussion