4

У меня есть webapp, где пользователи анонимно аутентифицируются Firebase Auth. Я храню изображения от пользователей в Firebase Storage, которые за кулисами поддерживаются ведром Google Cloud Storage. Когда я пытаюсь использовать API Google Cloud Vision с клиентского javascript для получения свойств изображения, я получаю ошибку разрешения.Как использовать изображение хранилища Firebase с API Google Cloud Vision?

image-annotator::User lacks permission.: Can not open file: gs://MYAPP.appspot.com/photos/IMG_12345.jpg 

Если я сделаю изображение общедоступным, все будет работать. Но это данные пользователя и не могут быть общедоступными. Как я могу это решить?

Мой код для вызова зрения API:

gapi.client.init({ 
    'apiKey': MY_API_KEY, 
    'discoveryDocs': ['https://vision.googleapis.com/$discovery/rest'], 
    // clientId and scope are optional if auth is not required. 
    'clientId': MY_APP_ID + '.apps.googleusercontent.com', 
    'scope': 'profile', 
    }).then(function() { 
    // 3. Initialize and make the API request. 
    return gapi.client.vision.images.annotate({ 
     "requests": 
     [ 
     { 
      "features": 
      [ 
      { 
       "type": "LABEL_DETECTION" 
      }, 
      { 
       "type": "IMAGE_PROPERTIES" 
      } 
      ], 
      "image": 
      { 
      "source": 
      { 
       "gcsImageUri": "gs://MY_APP.appspot.com/photos/" + "IMG_12345.jpg" 
      } 
      } 
     } 
     ] 
    }); 
    }).then(function(response) { 
    console.log(response.result); 
    }, function(reason) { 
    console.log('Error: ' + reason.result.error.message); 
    }); 

Мой код для загрузки изображений на хранение:

var file = e.target.files[0]; 
var metadata = { 
    contentType: file.type 
}; 
console.log(file); 

var uploadTask = photosStorageRef.child(file.name).put(file, metadata); 

ответ

1

Вы действительно хотите сделать это на стороне сервера, через что-то вроде Google Cloud Functions (see my example here).

Клиентская сторона потребует, чтобы ваш ключ API имел достаточное разрешение на доступ к фотографиям, что в основном сделает частные фотографии общедоступными (потому что, как только ключ API получит разрешение на их чтение, что может помешать вредоносному клиенту сделать это?).

+0

Есть ли способ иметь аутентификацию для каждого пользователя для каждого пользователя? При доступе через хранилище firebase это возможно, см. Https://firebase.google.com/docs/storage/, в частности «Firebase Storage интегрируется с Firebase Authentication для идентификации пользователей и предоставляет декларативный язык безопасности, который позволяет вам устанавливать доступ управления отдельными файлами или группами файлов, чтобы вы могли делать файлы как общедоступными или частными, как вы хотите ». – astromme

+0

Также, спасибо. Я запросил доступ к облачным функциям alpha. Полагаю, теперь я жду? – astromme

+0

В зоне Firebase см. Https://firebase.google.com/docs/storage/security/user-security –

 Смежные вопросы

  • Нет связанных вопросов^_^