解決方法
アプリから関数を呼び出すのfunctions.https.onCall
でCloud Functionsを呼び出した際に、以下のようにCORSエラーに遭遇した。
色々調べてた結果、onCall function returning cors on web and "UNAUTHENTICATED" on mobileに書かれている通り、Google CloudのCloud Functionsの権限設定で以下のような権限を追加したら問題は解決された。
上記は公式でも触れられているので解決策としてアリだとは思われる。が、その場合、クライアント(ブラウザ)からの全てのクロスドメインアクセスが許可されてしまうので、App Checkでの保護が必須になるだろう(もしApp Checkがない場合、全てのPOSTリクエストが到達してしまいNG)。
※CORSはブラウザからのリクエストでしか発生しないので、バックエンドからのAPI呼び出しはCORSエラーにならず普通に通ってしまう。その意味でもApp Checkによる保護は必須だろう。
- 参考:FirebaseのCloud FunctionsでCORSが~とかAccess-Control-Allow-Originが~と言われたらこれ
- 参考:Firebase Callable Function + CORS
- 参考:プリンシパル すべてのユーザー
うまくいかなかった方法
RuntimeOptions.invokerのallUsers
を設定する(public
も同じった)
RuntimeOptions.invokerをallUsers
に設定する、という方法。実装としては以下のようになる。
export const hogeHoge = functions
.region('asia-northeast1')
.runWith({ enforceAppCheck: true, invoker: 'allUsers' })
.https.onCall(async (data, context) => {
...
});