Wie im Backend implementieren?
Ich möchte einen OpenID Login in Go implementieren. Die Daten sollen per API vom Frontend möglichst direkt sobald sie verfügbar sind abgerufen werden und das mit möglichst wenig anfragen (polling wäre also zB eher schlecht).
Es soll mehr oder weniger eine dauerhafte Verbindung zwischen Back und Frontend geben. Der User tippt also den Login Button, das Frontend startet eine Anfrage an die API und wartet, der User wird auf die Seite des jeweiligen Anbieters redirected, kommt zurück und ist nun direkt eingeloggt, sprich die Daten stehen im Frontend direkt zur Verfügung bzw das Backend hat sie direkt nachdem der User wieder auf der eigenen Seite ist ans Frontend weitergeleitet.
Wie könnte man das in Go bzw generell implementieren bzw welche Technik oder welches Protokoll könnte man wie nutzen? Wäre gegebenfalls doch ein anderer Weg besser (bspw Polling) ?
1 Antwort
In dem Fall kannst eine WebSocket Verbindung nutzten. Ein WebSocket wird einmal mit einer HTTP Anfrage vom Client initialisiert und dann können sowohl Client als auch Server eigenständig Daten senden.
Ich kenn mich, aber nicht mit Go aus und weis auch nicht wie man Serverseitig das implementieren kann.
Hatte eine Initial Response vor dem redirect die ging noch, nach dem redirect ging dann nix mehr obwohl der Code ausgeführt wurde
Wenn die Seite neu geladen wird ist jede Verbindung weg. Das kann man nicht verhindern.
Sprich der redirect macht jede konstante Verbindung unmöglich und das ganze lässt sich nur durch Polling implementieren? Gibt's nicht ne Möglichkeit dass der Server irgendwie dem Client direkt die Infos weiterleitet? Oder ist das überhaupt ressourcensparender als Polling?
Hatte ich auch schon überlegt aber wüsste nicht wie, gibt's auch irgendnen Möglichkeit die Seite sozusagen in der eigenen Seite zu öffnen oder so ähnlich? Kenne mich insgesamt noch nicht so gut aus, weiß gar nicht ob das was ich da plane überhaupt besser ist...
Etwas in einem neuen Tab zu öffnen kannst du einfach machen indem du beim jeweiligen a-Tag das target Attribut auf _blank setzt.
Hab auch gerade geguckt, scheint so als hätte ich die Open Funktion in js auch komplett übersehen als ich gesucht hab - aber wüsstest du von ner Möglichkeit dass man in einem kleineren Fenster auf der eigenen Seite eine andere Seite öffnet? Mir würde da nur der Weg einfallen, dass man die Seite nachstellt und über abgesicherte requests an den Server die ganzen Inputs an die eigentliche Seite bzw dessen API leitet...
Dafür kannst du ein iframe nutzen. Damit kannst du eine Website in deine einbetten. Mir fällt da noch ein das PayPal ja zum bezahlen auf Websites die mini Bowser fenster hat die dann aufploppen. Ich schau mal nach wie man die macht
Diese mini Browserfenster gehen auch sehr einfach:
var url = "https://www.example.com/";
// Optionen für das neue Fenster
var options = "width=600,height=400";
var miniWindow = window.open(url, "_blank", options);
Websockets kenn ich, die Verbindung bleibt aber auch nach redirect bestehen? Ich hatte schon SSE implementiert da war die Verbindung weg wenn ich mich nicht täusche...