Ошибка: Вам нужно передать экземпляр аутентификации, чтобы использовать резервный клиент gRPC в браузере или другом non-Node.js окружающая среда

# #google-cloud-platform #google-api #google-oauth #google-vision

Вопрос:

Я пытаюсь установить учетные данные приложения Google, используя следующую команду set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH (я заменил KEY_PATH путем к файлу JSON, содержащему ключ моей учетной записи службы).

Когда я выполняю эту команду

gcloud auth application-default print-access-token все работает нормально.

Но я получаю эту ошибку в браузере

Ошибка: {«Путь к службе»:»vision.googleapis.com»,»порт»:443,»ClientConfig»:{},»запасной вариант»:true}Вам необходимо передать экземпляр аутентификации для использования gRPC-резервного клиента в браузере или другом non-Node.js окружающая среда. Используйте OAuth2Client из библиотеки Google-auth.

Это файл, в котором я использую vision:

 import React, { useEffect, useRef } from "react";
import Webcam from "react-webcam";
      
      const Home = () => {
          // Get a reference to the Cloud Vision API component
const Vision = require('@google-cloud/vision');
const vision = new Vision.ImageAnnotatorClient();

        const webcamRef = React.useRef(null);
        const [imgSrc, setImgSrc] = React.useState(null);
      
        const capture = React.useCallback(() => {
          const imageSrc = webcamRef.current.getScreenshot();

          let text;
    vision.textDetection(imageSrc)
        .then(([detections]) => {
            const annotation = detections.textAnnotations[0];
            text = annotation ? annotation.description : '';
            console.log(`Extracted text: ${text}`);
            console.log(`Extracted text from image (${text.length} chars)`);
        }).catch(vis_err => {
            console.error("Vision error:" , vis_err);
        });
          setImgSrc(imageSrc);
        }, [webcamRef, setImgSrc]);
      
        return (
            <>
              <Webcam
                audio={false}
                ref={webcamRef}
                screenshotFormat="image/jpeg"
              />
              <button onClick={capture}>Capture photo</button>
              {imgSrc amp;amp; (
                <img
                  src={imgSrc}
                />
              )}
            </>
          );
        };
export default Home

 

Кто-нибудь может объяснить, почему это происходит и как это можно решить? Любая помощь будет признательна!

Комментарии:

1. ты устал? Имя файла ключа: GOOGLE_APPLICATION_CREDENTIALS

2. @DaImTo спасибо за ваш ответ. Если я напишу: Имя файла ключа: GOOGLE_APPLICATION_CREDENTIALS, я получу ошибку: google_application_credentials не определен. Если я добавлю апостроф, я получу ту же ошибку, что и раньше, только с измененным именем файла ключа.

3. @DaImTo Я внес правку в сообщение. Я смог решить учетные данные приложений Google, указав другой путь, но ошибка в браузере сохраняется. Может ли быть проблемой, что React.js является ли это причиной?

4. Имеет ли ваша SA надлежащие разрешения на использование vision? Какие роли вы назначили этому SA? Не могли бы вы предоставить все ваши шаги для репликации этой проблемы? если вы будете выполнять echo $GOOGLE_APPLICATION_CREDENTIALS , получите ли вы свой путь?

5. У SA должно быть соответствующее разрешение, поскольку оно работает в других проектах. Назначенная роль-владелец. Выполнение предоставленной вами команды возвращает: $GOOGLE_APPLICATION_CREDENTIALS в cmd. Я выполнил все шаги в этом уроке: cloud.google.com/vision/docs/setup#windows . При настройке проекта я также использовал команду firebase init, поэтому у меня есть несколько других файлов, таких как firestore.rules и т. Д. Я внес правку в сообщение и добавил код, в котором я использую API vision.

Ответ №1:

Эта проблема была закрыта на Github некоторое время назад:

предполагается, что эта библиотека будет использоваться на стороне сервера Node.js приложение, а не из какой-либо интерфейсной среды, такой как браузер, электронное приложение, React (назовите здесь свой интерфейсный фреймворк). Если вы просто запустите код обычным обычным способом Node.js, это сработает.Сказав это, у нас есть экспериментальная поддержка варианта использования браузера, начиная с последней версии, которая составляет 0.11.0. Это экспериментально (только что реализовано) и еще не задокументировано. Хотя вы можете попробовать его использовать. Для этого вам необходимо передать аутентифицированный экземпляр OAuth2Client (из библиотеки google-auth) в качестве параметра аутентификации конструктора клиента

Вот ссылка: https://github.com/googleapis/nodejs-dialogflow/issues/405#issuecomment-529713296