こんにちはいくつかの助けを探して、
ログインしたユーザーが画像をFirebaseストレージにアップロードできるようにするJavaScriptコードを現在持っています。アップロードした画像をプロフィール写真にしたいのですが、アップロードした画像を特定のユーザーにリンクすることができないようです。
動作します。アップロードされた画像はコンソールで確認できますが、アップロードしたユーザーを特定するものはありません。
//Upload Profile Picture
//Altered code from: Firebase Youtube Channel.
//Get Elements
var uploader = document.getElementById('uploader');
var fileButton = document.getElementById('fileButton');
//Listen for file
fileButton.addEventListener('change', function(e){
//Get File
var file = e.target.files[0];
//Create a Storage Ref
var storageRef = firebase.storage().ref('profilePictures/' + file.name);
//Upload file
var task = storageRef.put(file);
var user = firebase.auth().currentUser;
//Update Progress Bar
task.on('state_changed',
function progress(snapshot){
var percentage = (snapshot.bytesTransferred / snapshot.totalBytes) *100;
uploader.value = percentage;
//if percentage = 100
//$(".overlay").hide();
},
function error(err){
},
function complete(){
}
);
});
//Display Profile Picture
function showUserDetails(){
var user = firebase.auth().currentUser;
var name, photoUrl;
if (user != null) {
name = user.displayName;
photoUrl = user.photoURL;
document.getElementById('dp').innerHTML=photoURL;
document.getElementById('username').innerHTML=name;
}}
Firebaseのドキュメントで以下のコードを見ましたが、写真のURL画像を更新する方法や表示する方法がわかりません。
var user = firebase.auth().currentUser;
var name, email, photoUrl, uid;
if (user != null) {
name = user.displayName;
email = user.email;
photoUrl = user.photoURL;
uid = user.uid; // The user's ID, unique to the Firebase project. Do NOT use
// this value to authenticate with your backend server, if
// you have one. Use User.getToken() instead.
}
ヘルプやアドバイスを事前に感謝します。
ユーザー名でファイルを保存します。
// Get current username
var user = firebase.auth().currentUser;
// Create a Storage Ref w/ username
var storageRef = firebase.storage().ref(user + '/profilePicture/' + file.name);
// Upload file
var task = storageRef.put(file);
したがって、ユーザーがuser:12345
で、ファイル名がprofile.jpg
の場合、ファイルはuser:12345/profilePicture/profile.jpg
として保存されます。次のように Security Rules でこれを保護できます。
service firebase.storage {
match /b/<your-firebase-storage-bucket>/o {
match /{userId}/profilePicture/{fileName} {
// Anyone can read
allow read;
// Only the user can upload their own profile picture
// Profile picture must be of content-type "image/*"
allow write: if request.auth.uid == userId
&& request.resource.contentType.matches('image/.+');
}
}
}