2016-05-27 29 views
0

所以我有這個代碼,只有當我用我的谷歌帳戶登錄時它才能正常工作。當我沒有登錄時,我必須登錄才能繼續創建事件功能。有什麼辦法可以讓任何人都可以將活動添加到我的公共日曆中嗎?我搜索了很多地方,但我似乎無法找到任何答案。 :P如何使某個網站能夠使用gapi編輯公共Google日曆?

var CLIENT_ID = 'MY CLIENT_ID GOES HERE'; 
var SCOPES = ["https://www.googleapis.com/auth/calendar"]; 

checkAuth(); 

function checkAuth() { 
    gapi.auth.authorize(
     { 
      'client_id': CLIENT_ID, 
      'scope': SCOPES.join(' '), 
      'immediate': true 
     }, handleAuthResult); 
} 

function handleAuthResult(authResult) { 
    if (authResult && !authResult.error) { 
     console.log(authResult); 
     loadCalendarApi(); 
    } else { 
     gapi.auth.authorize(
      {client_id: CLIENT_ID, scope: SCOPES, immediate: false}, 
      handleAuthResult); 
     return false; 
    } 
} 

function loadCalendarApi() { 
    gapi.client.load('calendar', 'v3', createEvent); 
} 

function createEvent(){ 
    var resource = { 
     "summary": eventName, 
     "location": location, 
     "description": rid, 
     "start": { 
        "dateTime": startNew 
       }, 
     "end": { 
        "dateTime": endNew 
       }, 
    }; 
    var request = gapi.client.calendar.events.insert({ 
     'calendarId': 'MY CALENDAR ID GOES [email protected]', 
     'resource': resource 
    }); 
    request.execute(function(resp) { 
     console.log(resp); 
     callback(); 
    }); 
} 

注意到一些代碼被遺漏了。但一切工作正常。

回答

0

您可以嘗試creating a service account

服務帳戶的憑據包括生成的電子郵件地址是唯一的,至少一個公鑰/私鑰對。

您的應用程序現在有權在您的域中以用戶身份進行API調用(以「impersonate」用戶身份)。當您準備進行授權的API調用時,可以指定用戶模擬。

您可以從thread按照此步驟:

  1. 你需要去谷歌開發者控制檯並將您的帳戶作爲「服務帳戶」。這將與Web應用程序區分開來。最重要的區別是,在添加事件之前,沒有人會被提示登錄到他們的賬戶,因爲賬戶將屬於您的應用程序,而不是最終用戶。欲瞭解更多信息,請參閱本文,從第5頁開始。
  2. 您需要創建一個公鑰/私鑰對。在開發者控制檯中,點擊憑證。在你的服務帳戶下,點擊'生成新的P12密鑰'。你需要把它存儲在某個地方。該文件位置成爲下面代碼中的$ key_file_location變量字符串。
  3. 同樣從開發者的控制檯,您需要啓用日曆API。
  4. 在您想要添加事件的Google日曆中,在設置下,點擊日曆設置,然後點擊頂部的「共享此日曆」。在「人員」字段中的「與特定人員共享」下,從服務帳戶憑據中粘貼電子郵件地址。將權限設置更改爲「更改事件」。不要忘記保存更改。

也有在線程一些鏈接,這將有助於你實現服務帳戶到您的網站。

我希望這會有所幫助。

+1

此外,服務帳戶需要具有對此日曆的寫入權限。這意味着需要更改目標日曆的ACL以包含服務帳戶的電子郵件地址。如果目標日曆是域擁有的,則可能會出現一些複雜情況,因爲可能會應用域最大ACL。在這種情況下,可能需要在全域範圍內授權。 – luc

+0

所以我想你可以用node.js實現這一點,但有沒有什麼辦法可以讓我用javascript來完成這個任務? – jake

相關問題