首页 > 解决方案 > 错误:您需要传递 auth 实例才能在浏览器或其他非 Node.js 环境中使用 gRPC-fallback 客户端

问题描述

我正在尝试使用以下命令设置 google 应用程序凭据set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH(我将 KEY_PATH 替换为包含我的服务帐户密钥的 JSON 文件的路径)。

当我运行这个命令

gcloud auth application-default print-access-token一切正常。

但我在浏览器上收到此错误

错误:{"servicePath":"vision.googleapis.com","port":443,"clientConfig":{},"fallback":true}您需要传递 auth 实例才能在浏览器或其他设备中使用 gRPC-fallback 客户端非 Node.js 环境。使用来自 google-auth-library 的 OAuth2Client。

这是我使用视觉的文件:

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 && (
                <img
                  src={imgSrc}
                />
              )}
            </>
          );
        };
export default Home

谁能解释为什么会发生这种情况以及如何解决?任何帮助,将不胜感激!

标签: google-cloud-platformgoogle-apigoogle-oauthgoogle-vision

解决方案


这个问题不久前在 Github 上关闭:

这个库应该用于服务器端 Node.js 应用程序,而不是任何前端环境,例如浏览器、Electron 应用程序、React(在此处命名您的前端框架)。如果您只是通过普通的常规 Node.js 运行代码,它将起作用。话虽如此 - 我们确实从最新版本 0.11.0 开始对浏览器用例提供实验性支持。它是实验性的(刚刚实现),还没有真正记录在案。你可以尝试使用它。为此,您需要将经过身份验证的 OAuth2Client 实例(来自 google-auth-library)作为客户端构造函数的 auth 参数传递

这是链接:https ://github.com/googleapis/nodejs-dialogflow/issues/405#issuecomment-529713296


推荐阅读