web-dev-qa-db-ja.com

GoogleスプレッドシートAPIリクエストの認証スコープが不十分でした

Nodejsで次のスクリプトを使用して、Googleスプレッドシートからデータを読み取るスクリプトを作成しています。

var url = oauth2Client.generateAuthUrl({
    access_type:     'offline',
    approval_Prompt: 'force',
    scope: [
      'https://www.googleapis.com/auth/analytics.readonly',
      'https://www.googleapis.com/auth/drive',
      'https://www.googleapis.com/auth/spreadsheets'
    ]
});
global.googleapis = { expiry_date: 0 };
google.options({ auth: oauth2Client });
var sheets    = google.sheets('v4');
sheets.spreadsheets.get({ spreadsheetId: 'id'}, function(err, data) {
    res.send(err, data);
});

しかし、すべての取得リクエストでこのエラーが発生しています:

Request had insufficient authentication scopes.

Google Developers ConsoleをチェックしてGoogle Drive APIを有効にしましたが、有効になっているので、何ができるのかわかりません。

24
jtomasrl
  1. まず、資格情報ファイルを削除します~/.credentials/sheets.googleapis.com-nodejs-quickstart.json(設定によります)

  2. Googleスプレッドシートからのセルの読み取りに使用されるスコープ変数を

var SCOPES = [' https://www.googleapis.com/auth/spreadsheets.readonly '];

var SCOPES = [' https://www.googleapis.com/auth/spreadsheets '];

  1. コードの実行後、APIが再度認証され、問題が解決されます。
39
Long Nguyen

スコープは良好に見えます。以前に/Users/yourUserName/.credentials/sheets.googleapis.com-projectName/*に保存された資格情報を削除してから、アプリケーションを再度実行して新しい資格情報を取得する必要があります。

19
Ken H

まず、デベロッパーコンソールでSheets APIを有効にするを確認します。

insufficient authentication scopesは、リクエストで提供されるOAuth 2.0トークンのエラーです- scopes は、リクエストされたデータにアクセスするには不十分です。

そのため、適切で必要なすべてのスコープを使用し、これを確認してください OAuth 2. を使用したリクエストの承認)。

最後に、アクセスを取り消してやり直してみてください。

詳細については、関連するSOの質問:

5
KENdi

トークンフォルダーからトークンを削除して、再試行してください。スプレッドシートクイックスタートを実行する前にGoogleドライブクイックスタートを実行しようとした場合、既存のトークンのスプレッドシートへのアクセスが更新されない可能性があります。

0
Hasan Sawan

スコープを更新したときに同じ問題が発生しました。指示とともに、pythonスクリプトを使用して同じディレクトリの下のtoken.jsonファイルを削除すると、認証スコープの問題はなくなりました。

0
王雅晶

私の場合、token.pickleファイルはプログラムと同じ作業ディレクトリに作成され、同じディレクトリにcredentials.jsonファイルがあり、token.pickleファイルを削除してからスコープを変更してから実行しましたもう一度、それはあなたのブラウザで再び認証を要求します、それはそれです、それは動作します。

私のコードスニペットは以下のようなもので、ピクルファイルを作成していたので、スコープを変更する前に削除する必要がありました

    if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)
0
herrogokunaruto

長い間、資格情報の場所を探していました。フォーラムの多くは、c:\ users\.credentials\google-api ****。jsonの下にあると言っていましたが、どこにも見つかりませんでした。それから、私のプログラムがtoken.pickleファイルをprogram .pyディレクトリーに作成したことがわかりました。これは本質的に信任状ファイルです。

0
Ajayvignesh