へのアクセスを拒否しFirebaseストレージセキュリティルールを取得:カント私は何かのWRT Firebaseストレージルールを欠けていると確信しているが、私は次のことをやったファイル
STEPを1
まず私が設定次Firebaseストレージルール:私は唯一のカスタム要求をユーザーに署名した予想
service firebase.storage {
match /b/{bucket}/o {
match /items/{dev_key}/{perm_id}/{file_name} {
allow write: if request.auth.uid == dev_id;
allow read: if request.auth.token.permId == perm_id;
}
}
}
はallow read: if request.auth.token.permId == perm_id;
、ファイルをダウンロードできるようにするには、関連する場所にマッチpermId。だから、
、次のように私は、ユーザーにcustom claim in Cloud Functionsを設定します。
STEP 2
admin.auth().setCustomUserClaims(uid, {permId: '1'}).then(() => {
// send off some triggers to let user know the download is coming
admin.database().ref(`collection/${uid}/${itemId}`).update({
downloadReady: true
});
});
を次に私は、ユーザーに署名し、再びに戻って署名した...カスタム要求を設定しています。 私は次のように彼らはクラウド機能に設定されたことを確認:
STEP 3
admin.auth().verifyIdToken(idToken).then((claims) => {
console.log("--------------claims -------------");
console.log(JSON.stringify(claims));
});
をそして、私はクライアント側では...クレーム列にpermID: "1"
を見た私は、downloadURLを要求しました(ここでうまくいけばうまくいけば間違っています)...これは公開ダウンロードURLではなく、Firebase StorageのセキュリティルールがチェックするダウンロードURLであることを期待しています。
ステップ4
私はこの呼び出しから受け取ったvar pathReference = storage.ref('items/<some-key>/1/Item-1');
pathReference.getDownloadURL()
.then((url)=>{
console.log("url: ", url);
})
URLは私にこのリンク https://firebasestorage.googleapis.com/v0/b/emiru84-games.appspot.com/o/games%2FcfaoVuEdJqOWDi9oeaLLphXl0E82%2F1%2FGame-1?alt=media&token=45653143-924a-4a7e-b51d-00774d8986a0 (私がテストに使用小さな小さな画像)
を与えたこれまでのところは良い、正しい主張を持つユーザーは、これを表示することができましたimage
次に、ステップ2を繰り返しますが、この場合はpermIdを「0」にしてログアウト/ログインし直してください。私は、ユーザーが正しいカスタム要求をもはや持っていないため、以前に生成されたURLが機能しなくなることを期待していました...バケットの場所はまだ同じ場所(バケット/ dev_key/1/filename)
手順4を繰り返した場合、新しいURLが取得され、適切な403エラー応答が返されます。しかし、古いURLはまだ働いていました(私は、トークンパラメータが付けられている限り)。もしそうならば、ダウンロードURLが公開されていれば、ストレージのセキュリティールールがどのように変わるのか分かりませんか?
私の霧の脳をクリアする助けがあれば幸いです。
完全に感謝します。とても有難い。 –