2

我按照指示in this great post設置了我的應用的服務器和Google操作之間的帳戶關聯。Google Actions - 訪問帶有訪問令牌的Calendar API失敗

在auth過程中,我要求「https://www.googleapis.com/auth/calendar」作用域權限。

我設法通過調用

app.getUser().accessToken 

讓我的服務器上的身份驗證令牌但是,當我提出一個請求googleapi日曆,使用這段代碼:

const google = require('googleapis'); 
var calendar = google.calendar('v3'); 

var eventData = { 
    auth: myAuthToken, 
    calendarId: 'primary', 
    resource: { 
     'summary': 'My Event', 
     'description': 'Event desc', 
     'start': { 
      'dateTime': '2017-06-11', 
     }, 
     'transparency': 'transparent', 
     'visibility': 'private', 
     'colorId': 'blue' 
    } 
}; 

calendar.events.insert(eventData, 
    function(err, event) { 
    if (err) { 
     console.log(err) 
    } 
}); 

我得到的是這樣的錯誤:

{ Error: Login Required 
    at Request._callback (\node_modules\google-auth-library\lib\transporters.js:85:15) 
    at Request.self.callback (\node_modules\request\request.js:188:22) 
    at emitTwo (events.js:106:13) 
    at Request.emit (events.js:191:7) 
    at Request.<anonymous> (\node_modules\request\request.js:1171:10) 
    at emitOne (events.js:96:13) 
    at Request.emit (events.js:188:7) 
    at IncomingMessage.<anonymous> (\node_modules\request\request.js:1091:12) 
    at IncomingMessage.g (events.js:291:16) 
    at emitNone (events.js:91:20) 
    code: 401, 
    errors: 
    [ { domain: 'global', 
     reason: 'required', 
     message: 'Login Required', 
     locationType: 'header', 
     location: 'Authorization' } ] } 

是否有任何額外的身份驗證步驟我應該遵循?

+0

也許它與這個問題有關? https://developers.google.com/identity/protocols/googlescopes可訪問某些用戶數據的公開應用程序必須通過審覈。如果您的應用出現訪問錯誤,請使用我們的OAuth開發者驗證表單提交請求..... – Lizozom

回答

1

我認爲問題在於你用作auth參數的結構不正確。你傳遞一個字符串標記,而它應該是一個OAuth2對象。見https://github.com/google/google-api-nodejs-client#making-authenticated-requests的細節,但總之,你將需要:

  1. 建立OAuth2對象

var OAuth2 = google.auth.OAuth2; 
var oauth2Client = new OAuth2(
    YOUR_CLIENT_ID, 
    YOUR_CLIENT_SECRET, 
    YOUR_REDIRECT_URL 
); 
  • 設置憑據(訪問令牌)。
  • 
    oauth2Client.setCredentials({ 
        access_token: 'ACCESS TOKEN HERE' 
    }); 
    
  • 使用此oauth2Client對象在事件數據/呼叫auth參數。
  • 
    var eventData = { 
        auth: oauth2Client, 
        ... 
    }; 
    
    +0

    Oauth信息與我在API.AI帳戶中輸入的信息相同嗎?還是來自不同的位置? @Prisoner – Lizozom

    +0

    是的,這些值應與您在設置OAuth信息時指定的值相同。 – Prisoner

    +0

    得到它的工作。謝謝! – Lizozom