2013-11-24 17 views
6

Der Versuch, Google Drive API in Node-Webkit zu arbeiten.Node-Webkit und Google Drive API

Wenn die Authentifizierungsnachricht gesendet wird, wird sie mit einem Ursprung der Datei: // gesendet, die zurückgewiesen wird.

https://accounts.google.com/o/oauth2/auth 
?client_id=<some value> 
&scope=https://www.googleapis.com/auth/drive.appdata 
https://www.googleapis.com/auth/drive.file 
https://www.googleapis.com/auth/drive 
&immediate=true 
&proxy=oauth2relay1232990068 
&redirect_uri=postmessage 
&origin=file:// 
&response_type=token 
&state=1938150804|0.1319366391 
&authuser=0 

Nicht sicher, warum es so aus gapi gesendet - Wer weiß, wie Google von Knoten-webkit fahren auth?

+0

Meine Vermutung ist, dass gapi nicht mit Knoten geschrieben wurde als ein Anwendungsfall. Mein kurzer Vorschlag ist es nicht zu benutzen. Sie wissen, wie die URL aussehen muss. Rufen Sie sie einfach direkt auf und parsen Sie die JSON-Antwort. – pinoyyid

+0

Ich nahm Ihren Ratschlag an - es war einfach genug, die REST-Desktop-Lösung zu implementieren. – ed4becky

Antwort

4

Ich entschied mich, die API für oAuth zu umgehen und es selbst zu tun.

Der Benutzer muss einen Auth-Code kopieren und in meine App einfügen - nicht die erste Wahl, aber sie müssen es nur einmal tun und es ist besser als die (fehlende) Alternative.

den Code für die Interessenten teilen:

Wenn der Benutzer wählen, Google Laufwerk:

  window.open('https://accounts.google.com/o/oauth2/auth?' 
        + 'client_id=<some value>' 
        + '&scope=<space delimited list of permissions>' 
        + '&redirect_uri=urn:ietf:wg:oauth:2.0:oob' 
        + '&response_type=code'); 

Dies erzeugt ein Popup, das sie lassen sich und stellen ihr Auth-Code.

Wenn Auth-Code in meiner Anwendung eingefügt wird, ich speichern Sie sie auf DB und füllen einen Zugangscode bekommen, die ich dann auf DB speichern:

  $.ajax({ 
       url: "https://accounts.google.com/o/oauth2/token", 
       type: 'post', 
       data: { 
        code: <authCode>, 
        client_id: CLIENT_ID, 
        client_secret: CLIENT_SECRET, 
        redirect_uri: 'urn:ietf:wg:oauth:2.0:oob', 
        grant_type: 'authorization_code' 
       } 
      }).error(function(data) { 
       myObj.isAuth = false; 
       if (cbFail) { 
        cbFail(data); 
       } 
      }).success(function(data) { 
       myObj.isAuth = true; 
       <persist entire response> 
       if (cbSuccess) { 
        cbSuccess(); 
       } 
      });