2017-11-11 10 views
2

私はデートするReact Webアプリケーションを作成しています。ユーザーは自分の写真をユーザープロフィールにアップロードできます。私はFirebaseストレージを使いたいです。今私はこのような画像を得る - 私は、認証されたユーザーで私のWebアプリからアクセスするとき、彼らはのみ閲覧可能になるように画像を保護したい:私のReact Webアプリケーションからのみアクセス可能な画像にFirebase Storageを使用できますか?

let storageRef = firebase.storage().ref(`images/${userid}/${userImageName}`); 

// Get the download URL 
storageRef.getDownloadURL().then(function(url) { 
    // Insert url into an <img> tag to "download" 
}) 

これは素晴らしいです - しかし、私一度にURLを入れてimageタグのsrc属性ソースコードを閲覧する人は誰でもURLをコピーして電子メール、テキストメッセージなどで送信して"public"とすることができます。私は画像をのbase64文字列にアップロードしようとしました。putString()機能はFirebaseストレージ専用ですが、put()機能を使用している場合は通常の画像アップロードのようにURLを作成します。

私の質問はFirebase Storageを使って画像を保存し、"private"にして、私のWebアプリケーションの認証されたユーザだけが閲覧できるようにすることができますか?画像データのみを取得し、frontend/clientの画像を生成するためにそれを使用して、実際のURLがJSコードに配置されないようにする方法はありますか?

service firebase.storage { 
    match /b/{bucket}/o { 
    match /images/{userId}/{userImageName} { 
     // any authenticated user can read the bytes or get a download URL 
     allow read: if request.auth != null; 
     // only the given user can upload their photo 
     allow write: if request.auth.uid == userId; 
    } 
    } 
} 

彼らが認証されていない人々はURLをダウンロードすることができません。

答えて

1

getDownloadURL()への呼び出しは、あなたのようなルールを記述する場合のことを意味し、セキュリティルールによって保護されています。

第2の問題点:誰かがファイルを閲覧できるようになると、URLが公開されていなくても(またはページ上であっても)既にダウンロード/スクリーンショットして共有できると仮定します。何かを見ることはそれをダウンロードすることと同じです。最終的な結果が同じになるので、どこから来ても差はありません。

関連する問題