2016-06-01 86 views
1

我是Google Apps域的suadmin,負責處理Calendar API。日曆應用程序被標記爲在管理控制檯中爲所有用戶激活。共享參數:通過管理日曆應用程序控制臺共享所有信息,無需修改內部和外部用戶的權限。我創建了一個共享資源並訂閱了它的議程。爲了簡化,我與大家分享了可用性信息的議程。Google日曆API Nodejs - 服務帳戶 - 代理

我實現了一個應用程序不同的方式來找到最好的 - 對我來說。從Google App腳本(HTML),瀏覽器端腳本和nodejs服務器端腳本(瀏覽器端授權),一切工作正常。用戶總是被要求通過Google登錄和權限對話框交互授予訪問權限。

現在我想要一個nodejs 服務器端應用程序與委派訪問議程(即共享資源),而用戶不必交互授予訪問權限。所以我使用服務帳戶。現在去代碼。

所以創建項目後,我激活了日曆API,驗證了源代碼(通過nodejs express腳本驗證了谷歌驗證頁面爲靜態http://ip:8080並進行了驗證)。域驗證並不真正做出反應(沒有反向DNS名稱)。授權URL設置已設置,但對服務器應用程序無效,它是爲瀏覽器端應用程序設置的。

我創建了服務帳戶,使用委託並獲取帶有私鑰的json文件並將其複製到服務器上。 OAuth2客戶端創建得很好,我授權客戶端ID訪問Calendar API R/W。一切似乎都很好。

var google = require('googleapis') 
var calendar = google.calendar('v3') 
var scopes = ['https://www.googleapis.com/auth/calendar'] 
var key = require ('./xxx'); // private json 
var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, scopes, null); 
jwtClient.authorize(function(err, token) { 
    if(err) { ... } 
    console.log('token',token); 
    listCalendars(jwtClient); 
}); 

該腳本正在獲得授權,並且獲取訪問令牌。

{ access_token: 'xxxxxxxxxx', 
    token_type: 'Bearer', 
    expiry_date: 1464780030000, 
    refresh_token: 'jwt-placeholder' } 

到calendarList.list調用成功...

function listCalendars(auth) { 
    calendar.calendarList.list({ auth: auth }, function(err, response) { 
    if (err) { ... } 
    console.log(response); 
    listEvents(auth) 
    }) 
} 

,但沒有項目

{ kind: 'calendar#calendarList', 
    etag: '"1464776865512000"', 
    nextSyncToken: 'xxxxxx', 
    items: [] } 

服務帳戶沒有議程,所以它不一定是一個驚喜,但,以及,我認爲通過授權訪問,我可以得到域(用戶和資源)中所有議程的列表。

  1. 所以我的第一個問題是爲什麼沒有日曆在這裏列出?

現在我想列出我自己的議程(我是服務帳戶的所有者)即將舉行的活動。

function listEvents(auth) { 
    calendar.events.list({ 
    auth: auth, 
    // calendarId: 'primary', 
    calendarId: '[email protected]', 
    timeMin: new Date().toISOString(), 
    maxResults: 10, 
    singleEvents: true, 
    orderBy: 'startTime' 
    }, function(err, response) { 
    if(err) { ... } 
    var events = response.items; 
    if(events.length == 0) { ... } 
    ... 
    }); 
} 

我得到一個錯誤

The API call returned an error: Error: Not Found 
  • 我的第二個問題是,爲什麼我不能讓我的用戶日曆 事件的訪問,甚至當我指定該ID明確?

  • 我的最後一個問題將是有關獲取共享資源 議程和活動的訪問? ([email protected]

  • 感謝您的幫助,我會遵循這個問題

    +0

    沒問題,我去掉最大膽的部分 – Gil

    +0

    看起來像你必須明確地添加的服務帳戶的電子郵件地址(議程共享參數),即使你設置的公共共享功能,事件如果授予的所有@您的訪問域 – Gil

    回答

    2

    (發佈代表OP的)。

    服務帳戶的電子郵件地址必須共享每個日曆,即使日曆公開共享明確設置。

    相關問題