2016-06-20 16 views
0

Ich entwickle eine Angular App, die mit Electron läuft. Inside Electron Ich benutze OAuth basierend auf diesem Tutorial http://manos.im/blog/electron-oauth-with-github/.Elektron speichern OAuthToken in Angular verwenden

Alles funktioniert gut und ich erhalte das access_token innerhalb der main.js von Electron. Um meinen Endpunkt anzurufen, benötige ich dieses Token in meinem Angular Service. Wie übergebe ich dieses Token an Angular?

Meine Angular App wird zusammen mit Wepack und dann in Electron enthalten.

+0

Wäre es möglich, mein Token innerhalb der main.js in den lokalen Speicher zu schreiben und dann diesen Token mit eckigen lesen? Falls ja. Wie kann ich mit webpack in den lokalen Speicher schreiben? – Trafalgar

Antwort

0

Wenn ich richtig verstehe, wird der Github-Zugriffstoken im Hauptprozess empfangen. Lass es mich wissen, wenn ich es falsch verstanden habe.

Es klingt wie Ihre Frage könnte umformuliert werden, "Wie teile ich Daten zwischen den Hauptprozess und Renderer-Prozesse?". Der einfachste Weg dazu ist IPC (inter-process communication), mit dem Sie Nachrichten und Daten zwischen den Haupt- und Renderer-Prozessen senden können. Dies könnte hilfreich sein, auch: https://github.com/electron/electron/blob/master/docs/faq/electron-faq.md#how-to-share-data-between-web-pages

//from the main process 
const ipc = require('electron').ipcMain; 

function githubRequestCallback(response) { 
    window.webContents.send('github-access-token', { 
    token: response.data.token 
    }); 
} 

//in a renderer 
const ipc = require('electron').ipcRenderer; 
ipc.on('github-access-token', (event, {token}) => { 
    console.log('i haz the token', token); 
}); 

Wenn das Zugriffstoken in einem Renderer empfangen wird (dieser Artikel scheint, dass zu der Annahme), dann ja, Sie in localstorage setzen konnten, und ich denke, dass es verfügbar wäre in allen Renderer-Prozessen. Beachten Sie, dass die API localStorage nur im Renderer-Prozess verfügbar ist. Wenn der Hauptprozess darauf zugreifen muss, sollten Sie etwas anderes in Betracht ziehen oder einfach IPC verwenden, um sie weiterzugeben.

Eine andere Option wäre, das Token in einer Datei zu belassen, zum Beispiel mit electron-config (persistent es als JSON) oder wenn Sie viel Datenspeicher benötigen, etwa LevelDB. Die Haupt- und Rendererprozesse könnten dann dieselbe Konfigurationsdatei wie benötigt lesen/schreiben.

Jonglier Daten um mehrere Prozesse ist sozusagen eine neue Herausforderung für die meisten JS Leute, bin Bezifferung ich es noch aus mir :)

+0

Vielen Dank für Ihre hilfreiche Antwort. Ich habe das ipcMain erfolgreich in den Hauptprozess integriert. Nein, ich versuche den Rendercode in meinen Angular2 Service zu integrieren. Leider ist der ipcRenderer immer undefiniert. Weißt du, wie ich die Nachricht aus dem Hauptprozess in meinem angular 2-Dienst empfangen kann? – Trafalgar

+0

@Trafalgar verwenden Sie einen Modul Bundler wie Webpack? Die meisten Modulbündler schreiben 'require' um. – ccnokes

+0

Ja, ich verwende Webpack. Daher bin ich mir nicht sicher, wie man den electron.ipcRenderer richtig einbindet. – Trafalgar