http function call is wrong when the project id of Google cloud and firebase project are different
euledge opened this issue · comments
Hitoshi Kuroyanagi commented
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.
Hitoshi Kuroyanagi commented
フロントエンドからの呼び出しなので /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正しく呼べました。
kishi.sol commented
ご指摘ありがとうございます!!
おっしゃるとおりこちらは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}`