Ошибка: нет доступа, токен обновления или ключ API не установлены - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь создать приложение в Node для доступа к моему календарю Google, поэтому я выполнил шаги на https://developers.google.com/calendar/quickstart/nodejs, но я получаю Error: Error: No access, refresh token or API key is set..

Да, я создал учетные данные.

Да, я скачал json, переименовал в client_secret.json и добавил в папку приложения.

Вот код:

const fs = require('fs'); 
const readline = require('readline'); 
const {google} = require('googleapis'); 
const OAuth2Client = google.auth.OAuth2; 
const SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']; 
const TOKEN_PATH = './client_secret.json';

try {   
    const content = fs.readFileSync('client_secret.json');   
    authorize(JSON.parse(content), listEvents); 
} catch (err) {   
    return console.log('Error loading client secret file:', err); 
}

function authorize(credentials, callback) {   
    const {client_secret, client_id, redirect_uris} = credentials.installed;   
    let token = {};   
    const oAuth2Client = new OAuth2Client(client_id, client_secret, redirect_uris[0]);

      // Check if we have previously stored a token.   
    try {
        token = fs.readFileSync(TOKEN_PATH);   
    } catch (err) {
        return getAccessToken(oAuth2Client, callback);   
    }   
    oAuth2Client.setCredentials(JSON.parse(token));   
    callback(oAuth2Client); 
}

function getAccessToken(oAuth2Client, callback) {   
    const authUrl = oAuth2Client.generateAuthUrl({
        access_type: 'offline',
        scope: SCOPES,   
    });   
    console.log('Authorize this app by visiting this url:', authUrl);   
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,   
    });   
    rl.question('Enter the code from that page here: ', (code) => {
        rl.close();
        oAuth2Client.getToken(code, (err, token) => {
            if (err) return callback(err);
            oAuth2Client.setCredentials(token);
            // Store the token to disk for later program executions
            try {
                fs.writeFileSync(TOKEN_PATH, JSON.stringify(token));
                console.log('Token stored to', TOKEN_PATH);
            } catch (err) {
                console.error(err);
            }
        callback(oAuth2Client);
        });   
    }); 
}

function listEvents(auth) {   
    const calendar = google.calendar({version: 'v3', auth});   
    calendar.events.list({
        calendarId: 'primary',
        timeMin: (new Date()).toISOString(),
        maxResults: 10,
        singleEvents: true,
        orderBy: 'startTime',   }, (err, {data}) => {
            if (err) return console.log('The API returned an error: ' + err);
            const events = data.items;
            if (events.length) {
                console.log('Upcoming 10 events:');
                events.map((event, i) => {
                const start = event.start.dateTime || event.start.date;
                console.log(`${start} - ${event.summary}`);
            });
        } else {
          console.log('No upcoming events found.');
        }   
}); 

}

Есть идеи?

1 Ответ

0 голосов
/ 11 мая 2018

Можете ли вы снова подтвердить следующие пункты?

  • Файлы const TOKEN_PATH = './client_secret.json'; и const content = fs.readFileSync('client_secret.json'); совпадают.
    • Пожалуйста, измените значение с const TOKEN_PATH = './client_secret.json'; на const TOKEN_PATH = './credentials.json'; и запустите снова.
    • Таким образом, загруженный вами client_secret.json уже может быть перезаписан.Поэтому, пожалуйста, также подтвердите это.
  • При возникновении ошибки, даже если была произведена вышеуказанная модификация, пожалуйста, подтвердите версию googleapis.Потому что уже сообщалось, что googleapis с v25.0.0 - v30.0.0.есть некоторые ошибки для некоторых API.
    • Если вы считаете, что ошибка связана с ошибкой, измените версию googleapis на v24.0.0.Ошибка может быть удалена.

Ссылки:

Если этиизвините, баллы не пригодились для вашей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...