18 Stimmen

Rails - Mehrere Top-Level-Domains und eine einzige Sitzung/Cookie

Ich kämpfe schon eine ganze Weile mit diesem Problem und habe noch keine eine Lösung zu finden. Ich brauche einen Benutzer, der mit einem einzigen Login mehrere Top Level Domains mit einem einzigen Login.

Meines Erachtens muss diese Einstellung in environment.rb und aufgerufen mit before_dispatch . Das habe ich mir ausgedacht:

require 'activesupport'
require 'dispatcher'
module ActionController
   class Dispatcher

      def set_session_domain
         ActionController::Base.session_options.update :session_domain => "#{@request.host}"
      end 

      before_dispatch :set_session_domain
   end
end

Dies scheint jedoch nicht zu funktionieren, wenn ich versuche, die Werte von session[:session_domain] .

Für jede Hilfe sind wir sehr dankbar.

8voto

zenazn Punkte 14115

Das ist ein bisschen knifflig. Da Cookies nur der aktuellen Domäne ("forms.example.com") und übergeordneten Domänen (".example.com", aber nicht ".com") zugewiesen (und von dort abgerufen) werden können, aber NICHT anderen Domänen ("othersite.com"), müssen Sie eine andere Lösung finden. Das hat nichts mit Rails zu tun, sondern damit, wie Cookies funktionieren.

EDIT: Sitzungen sind auf ein kundenspezifisches Handle angewiesen, das in einem Cookie gespeichert ist, weshalb Sitzungen auch nicht domänenübergreifend funktionieren.

Diese Seite hat eine mögliche Lösung für die Erstellung eines domänenübergreifenden Cookies, und es ist der sauberste Weg, den ich kenne, obwohl er einige Sicherheitsauswirkungen haben kann. Eine kompliziertere Version würde die Server direkt über einen sicheren Kanal kommunizieren lassen.

Wenn Sie nach einem universelleren Dienst für eine einzige Anmeldung suchen, sollten Sie eine Form von OpenID .

2voto

Kris Punkte 18038

Für Sub-Domains in Rails 2.3

ActionController::Base.session = { :domain => ".mydomain.com" }

Für Top-Level-Domains versuchen Sie diese Middleware .

Ich habe mit der oben genannten Middleware im Moment gespielt und es funktioniert nicht ganz wie erwartet. Wenn Sie die Middleware verwenden, benötigen Sie den obigen Code nicht, da er auch Sub-Domains behandelt.

1voto

Sie werden wahrscheinlich etwas wie RubyCAS benötigen, wenn Sie eine Authentifizierung über Domänen hinweg wünschen, unabhängig davon, ob es sich um Top-Level- oder Subdomänen handelt.

0voto

Keltia Punkte 14251

Ihre Frage ist IMHO nicht wirklich präzise genug. Möchten Sie ein einzelnes Cookie für alle Rails-Anwendungen, die Sie haben oder ist es im Kontext einer einzigen? Wenn ersteres der Fall ist, sollten Sie sich Lösungen ansehen, die datenbankgestützte Sessions oder etwas in der Art von RubyCAS zur Umsetzung der CAS Protokoll.

0voto

sameera207 Punkte 16307

Keltia und zuk haben beide recht, die Antwort ist rubyCAS, wir haben diese Integration gemacht und sie erlaubt

SSI - Einmalige Anmeldung Sie melden sich bei einer Seite an und sind automatisch auch bei der anderen Seite angemeldet.

SSO - Einmalige Anmeldung Sie melden sich von einer Website ab und werden automatisch auch von der anderen abgemeldet

Für uns ist dies eine bewährte Lösung, die nicht schwer zu implementieren ist.

wir verwenden es in http://www.cabslk.com und www.ticketslk.com

Prost, Sameera

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X