2010-05-17 9 views
5

Ich bin in den frühen Phasen der Erstellung einer App mit Rails 3. Benutzerauthentifizierung wird von Authlogic, die ich so ziemlich als Standard (as per the example docs) und alles eingerichtet funktioniert wie erwartet lokal.Rails 3, Authlogic, NGINX und HTTP-Basis-Authentifizierung funktioniert nicht gut zusammen

Ich habe gerade die App auf eine saubere Server-Installation von Centos 5.4/NginX/Passenger installiert, so dass die Mitarbeiter sich einloggen und Inhalte eingeben können. Allerdings sind wir weit davon entfernt, für die Öffentlichkeit zugänglich zu sein Daher habe ich das Basisauthentifizierungsmodul von NginX verwendet, um die gesamte Website hinter einer anderen Authentifizierungsebene zu behalten.

Leider scheinen die Authentifizierung von Authlogic und die grundlegende Authentifizierung von NginX miteinander in Konflikt zu stehen. Wenn Basic Auth aktiviert ist, ist es unmöglich, sich mit Authlogic einzuloggen, und wenn ich Basic Auth deaktiviere, funktioniert Authlogic wie erwartet.

Ich habe keinen Code geschrieben, da ich wirklich nicht sicher bin, welcher Code relevant wäre. Ich frage mich, ob dies ein bekanntes Problem ist und ob ich Änderungen an der Konfiguration vornehmen kann, um das Problem zu umgehen?

Antwort

13

Ich kann meine eigene Frage beantworten (nach mehreren Stunden in völlig falschen Ort suchen). Eine gute Nachlese auf Authlogic::Session::Config hat den Trick gemacht.

class UserSession < Authlogic::Session::Base 
    allow_http_basic_auth false 
end 
+1

Wow .. so glücklich, dass ich das gefunden habe - ich habe versucht, dieses Problem seit etwa 3 Tagen zu lösen. Vielen Dank! – zaius

+0

Danke, hat mir sehr geholfen. –

+0

Vielen Dank in der Tat! – dangerousdave

1

Ich habe Rails 3 noch nicht getestet, meine Antwort wird allgemeiner sein. Und ich kenne das grundlegende Auth-Modul für NginX nicht.

  1. Wenn Ihr Team lokal verbunden ist, können Sie einen Server erstellen, auf den nur vom lokalen Netzwerk aus zugegriffen werden kann.
  2. Wenn Sie Zugriff über das Internet benötigen, können Sie es hinter VPN verstecken.
  3. Sie können den Zugriff auf die Site nur über lokale IP-Adresse festlegen und ssh-Zugriff für alle Benutzer freigeben. Es ist einfach, SOCKS-Proxy über ssh zu erstellen (in Linux: ssh -D 8080 [email protected]; wo 8080 ist die Port-Nummer, dann SOCKS-Proxy im Browser einstellen und Sie können yoursever.com: 3000 Mittagessen).
  4. Ich denke, dass NginX erlaubt Ihnen erlaubte IPs zu setzen und andere zu verweigern - so können Sie es auch für die Zugangsbeschränkung verwenden.
  5. Und auch Sie können temporär hinzufügen ApplicationControllerbefore_filter :require_login :), so nur Login-Seite wird der Welt zur Verfügung stehen.

Hoffe es hilft!

+0

Vielen Dank für Ihre Vorschläge. Am Ende habe ich meine eigene Frage beantwortet. Die Lösung war in der Dokumentation, musste nur hart genug suchen. – aaronrussell