elsoul / skeet

Skeet: Edge-Native Web Framework

Home Page:https://skeet.dev/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

http function call is wrong when the project id of Google cloud and firebase project are different

euledge opened this issue · comments

GoogleCloudのプロジェクトIDとFirebaseのプロジェクトIDが異なる場合 skeetOptions.json は以下のように

  • "projectId": "myproject-001"
  • "fbProjectId": "myproject"
    のようになりますが(firebaseのプロジェクトはfbProjectIdかと思います)
{
  "name": "compospet-app",
  "projectId": "myproject-001",
  "region": "asia-northeast1",
  "appDomain": "",
  "fbProjectId": "myproject"
}

この状態でチャットルーム作成APIを呼ぶと以下のようにプロジェクトIDはGoogleCloudのIDが使用されるためFirebaseの関数が呼ばれなくなると思います。

Access to fetch at 'http://127.0.0.1:5001/myproject-001/asia-northeast1/addStreamUserChatRoomMessage'
from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

フロントエンドからの呼び出しなので /skeet-cloud.config.json の設定ですね

lib/skeet.ts の以下の部分です

    const url =
      process.env.NODE_ENV === 'production'
        ? skeetCloudConfig.app.hasLoadBalancer
          ? `https://${
              skeetCloudConfig.app.lbDomain
            }/${functionName}/${toKebabCase(methodName)}`
          : `https://${skeetCloudConfig.app.region}-${skeetCloudConfig.app.projectId}.cloudfunctions.net/${methodName}`
        : `http://${platformDevIP}:5001/${skeetCloudConfig.app.projectId}/${skeetCloudConfig.app.region}/${methodName}`

仮にprojectIdにfbProjectIdと同じ値をコピーしたところAPI正しく呼べました。

ご指摘ありがとうございます!!
おっしゃるとおりこちらはfbProjectIdを指定するべきところでした!
テンプレートすべて修正しましたので、新しくskeet createしたものからは改善されるはずです!
いつもありがとうございます🙌

新しいskeet.tsのurl部分は下記になります (skeetCloudConfig.app.projectId => skeetCloudConfig.app.fbProjectId)

   const url =
      process.env.NODE_ENV === 'production'
        ? skeetCloudConfig.app.hasLoadBalancer
          ? `https://${
              skeetCloudConfig.app.lbDomain
            }/${functionName}/${toKebabCase(methodName)}`
          : `https://${skeetCloudConfig.app.region}-${skeetCloudConfig.app.fbProjectId}.cloudfunctions.net/${methodName}`
        : `http://${platformDevIP}:5001/${skeetCloudConfig.app.fbProjectId}/${skeetCloudConfig.app.region}/${methodName}`