2016-08-04 10 views
0

Hier ist das Szenario:Wie kann ich die Sitzung in der Rails-App mit Unterstützung für mehrere Domänen verwalten?

Ich habe eine Rails App auf einem einzigen Computer ausgeführt. Die App für diese Diskussion ist ein Content-Management-System und wird verwendet, um mehrere Standorte in einem Netzwerk zu bedienen. Es kann unter app.com erreicht werden. Benutzer sollten in der Lage sein, eine benutzerdefinierte Domäne für ihre Site einzurichten.

Womit ich kämpfen muss ist, wie man die Sitzung erhält, so dass ein Benutzer sich nur einmal in das Netzwerk anmelden muss. Wenn sie eine Site im Netzwerk besuchen, sollte ihre Sitzung beibehalten werden. (Technisch befindet sich der Benutzer immer noch auf der gleichen Website, nur mit einer benutzerdefinierten URL für die besuchte Website.)

Wie kann ich die Sitzung für den Benutzer über alle Websites in der App verwalten?

Basierend auf dem, was ich über Cookies gelesen habe, ist dies schwierig b/c Cookies können nicht zwischen eindeutigen Domänen geteilt werden. Nach was ich suche, hilft Hilfe, die Teile des Problems im Spiel zu verstehen. Ich bin ein Spiel, um Rack Middleware zu schreiben oder andere Technologien vor der App hinzuzufügen, wenn das nötig ist. Schließlich möchte ich es für jede dieser Domains ermöglichen, HTTPS zu verwenden, aber lassen Sie uns beginnen, dies für jetzt zu verlassen.

Antwort

0

Sie können Sitzungen über eine Reihe von Weiterleitungen übertragen.

Nehmen wir an, Sie haben eine App mit der Domain platform.com und Sie hosten benutzerdefinierte Domänen wie customdomain.com auf dieser Plattform. Wie in der Frage beschrieben, sollten Benutzer, die unter platform.com angemeldet sind, in allen gehosteten Domänen angemeldet sein.

Die Grundidee funktioniert wie folgt:

  1. Benutzer bei platform.com
  2. Benutzer fordert eine Seite auf customdomain.com
  3. App-Server die Anforderung von der customdomain.com sieht und sieht, dass der Benutzer nicht angemeldet ist in customdomain.com.
  4. App-Server umleitet zu platform.com/get_session?redirect=customdomain.com
  5. App-Server customdomain.com/set_session?login_token=<HASH> umleitet
  6. App-Server-Session-Cookie als Antwort auf set_session

Voila setzt !! Die Benutzersitzung wird jetzt von platform.com an customdomain.com übertragen.

Vorbehalt: Die Herausforderung hier ist in den Details, wenn die App die Umleitung entscheidet. Sie müssen Logik hinzufügen, um sicherzustellen, dass Sie nicht in einem unendlichen Umleitungszyklus enden.

Verwandte Themen