Я пытаюсь загрузить файл для загрузки изображения в Firebase Storage с правилом, согласно которому пользователь может писать только в свой профиль пользователя. Ниже приведены мои правила хранения
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /users/{userId}/{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth.uid == userId;
}
}
}
Однако, когда я загружаю изображение, я получаю ошибку об отказе в доступе. Я уверен, что я покрыл все другие углы относительно того, почему это пошло не так. Единственное, о чем я могу думать, это то, что мой идентификатор пользователя не отправляется в хранилище Firebase правильно. Я получаю свой токен и идентификатор пользователя от отправки запроса POST
. Это моя функция регистрации
return async dispatch => {
const response = await fetch(
'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key={MYKEY}',
{
method: 'POST',
headers: {
'Content-Type' : 'application/json'
},
body: JSON.stringify({
email: email,
password: password,
returnSecureToken: true
})
}
);
if (!response.ok) {
const errorData = await response.json()
const errorId = errorData.error.message;
let message = 'Something went wrong!'
if (errorId === 'EMAIL_EXISTS') {
message = 'The email entered already exists';
}
throw new Error(message);
}
const resData = await response.json()
dispatch(authenticate(resData.localId,resData.idToken,parseInt(resData.expiresIn) * 1000, resData.refreshToken))
Есть ли какие-либо проблемы совместимости с токеном и userId, которые вы получаете из REST API и хранилища firebase. И если есть, каково решение для загрузки изображений в хранилище Firebase.
Это также моя функция uploadImage.
const uploadImage = async (uri, name) => {
const response = await fetch(uri);
const blob = await response.blob();
console.log(response)
console.log(blob)
var storageRef = firebase.storage().ref();
var profilePhotoRef = storageRef.child(`users/${uid}/${name}`);
return profilePhotoRef.put(blob);
};
Спасибо.