2016-05-27 13 views
0

Also ich habe diesen Code und es funktioniert nur dann einwandfrei, wenn ich mit meinem Google-Konto angemeldet bin. Wenn ich nicht eingeloggt bin, muss ich mich anmelden, um meine create event Funktion fortzusetzen. Gibt es eine Möglichkeit, es so zu machen, dass jeder meinem öffentlichen Kalender ein Ereignis hinzufügen kann? Ich habe viele Orte durchsucht, aber ich kann keine Antworten finden. : PWie kann eine bestimmte Website in der Lage sein, einen öffentlichen Google-Kalender mit gapi zu bearbeiten?

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(); 
    }); 
} 

Beachten Sie einige der Codes, die weggelassen wurden. Aber alles funktioniert einwandfrei.

Antwort

0

Sie können creating a service account versuchen:

Ein Anmeldeinformationen des Dienstkonto gehören eine generierte E-Mail-Adresse, die einzigartig und mindestens eine öffentliche/private Schlüsselpaar ist.

Ihre Anwendung verfügt jetzt über die Berechtigung, API-Aufrufe als Benutzer in Ihrer Domäne zu tätigen (zu "impersonate" Benutzer). Wenn Sie sich darauf vorbereiten, autorisierte API-Aufrufe auszuführen, geben Sie den Benutzer an, der die Identität annehmen soll.

Sie können diesen Schritt aus thread folgen:

  1. Sie müssen die Google Developer Konsole gehen und Ihr Konto als ‚Dienstkonto‘ markieren. Dies unterscheidet es von einer Webanwendung. Der wichtige Unterschied besteht darin, dass niemand aufgefordert wird, sich bei seinem Konto anzumelden, bevor die Ereignisse hinzugefügt werden, da das Konto zu Ihrer Anwendung und nicht zu einem Endbenutzer gehört. Weitere Informationen finden Sie in diesem Artikel ab Seite 5.
  2. Sie müssen ein öffentliches/privates Schlüsselpaar erstellen. Klicken Sie in der Entwicklerkonsole auf Anmeldeinformationen. Klicken Sie unter Ihrem Dienstkonto auf "Neuen P12-Schlüssel generieren". Sie müssen dies irgendwo speichern. Dieser Dateispeicherort wird im nachfolgenden Code zur $ key_file_location-Variablenzeichenfolge.
  3. Auch von der Entwicklerkonsole aus müssen Sie die Kalender-API aktivieren.
  4. In Google Kalender, dem Sie Ereignisse hinzufügen möchten, klicken Sie unter Einstellungen auf Kalendereinstellungen und dann oben auf "Diesen Kalender freigeben". Fügen Sie unter "Mit bestimmten Personen teilen" im Feld "Person" die E-Mail-Adresse aus den Anmeldedaten für das Dienstkonto ein. Ändern Sie die Berechtigungseinstellungen in "Änderungen an Ereignissen vornehmen". Vergessen Sie nicht, die Änderung zu speichern.

Es gibt auch einige Links in den Thread, den Sie bei der Umsetzung Dienstkonto auf Ihre Website helfen würde.

Ich hoffe, das hilft.

+1

Auch das Dienstkonto muss Schreibzugriff auf diesen Kalender haben. Das bedeutet, dass die ACLs des Zielkalenders so geändert werden müssen, dass sie die E-Mail-Adresse des Dienstkontos enthalten. Es gibt einige Komplikationen, wenn der Zielkalender domäneneigen ist, da möglicherweise Domänen-ACLs gelten. In diesem Fall kann eine domänenweite Delegation von Befugnissen erforderlich sein. – luc

+0

Also, ich denke du kannst das mit node.js erreichen, aber gibt es eine Möglichkeit, das nur mit Javascript zu erreichen? – jake