2010-05-17 8 views
5

Sono nelle prime fasi di costruzione di un'applicazione utilizzando Rails 3. L'autenticazione utente è alimentata da Authlogic che ho configurato praticamente come standard (as per the example docs) e tutto sta funzionando come previsto a livello locale.Rails 3, Authlogic, NGINX e HTTP autenticazione di base non funzionano bene insieme

Ho appena installato l'applicazione su un'installazione server pulita di Centos 5.4/NginX/Passenger in modo che lo staff possa iniziare ad accedere e immettere contenuto, ecc. Tuttavia, siamo molto lontani da questo essere pronti per gli occhi pubblici quindi ho usato il modulo di autenticazione di base di NginX per mantenere l'intero sito dietro un altro livello di autenticazione.

Sfortunatamente l'autenticazione di Authlogic e l'autenticazione di base di NginX sembrano essere in conflitto tra loro. Se l'autenticazione di base è attiva, è impossibile accedere con Authlogic, tuttavia se disabilito l'autenticazione di base, allora Authlogic funziona come previsto.

Non ho pubblicato alcun codice perché non sono davvero sicuro di quale codice sarebbe rilevante. Mi chiedo se si tratta di un problema noto e se sono presenti modifiche che posso apportare alla configurazione per risolvere il problema?

risposta

13

Posso rispondere alla mia stessa domanda (dopo diverse ore di ricerca nel posto sbagliato). Una buona lettura su Authlogic::Session::Config ha fatto il trucco.

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

Wow .. così felice ho trovato questo - ho cercato di risolvere questo problema per circa 3 giorni. Grazie! – zaius

+0

Grazie mi hai aiutato molto. –

+0

Mille grazie! – dangerousdave

1

Non ho ancora provato Rails 3, quindi la mia risposta sarà più generale. E non conosco il modulo di autenticazione di base per NginX.

  1. Se il proprio team è connesso localmente, è possibile creare un server accessibile solo dalla rete locale.
  2. Se è necessario l'accesso tramite Internet, è possibile nasconderlo dietro VPN.
  3. È possibile impostare l'accesso al sito solo tramite ip locale e fornire accesso ssh a chiunque ne abbia bisogno. È facile creare socks proxy tramite ssh (in linux: ssh -D 8080 [email protected]; dove 8080 è il numero di porta, quindi imposta il proxy socks nel browser e puoi pranzare su yourever.com:3000).
  4. Penso che NginX ti permetta di impostare gli IP consentiti e negare altri - in modo da poterlo utilizzare anche per la restrizione di accesso.
  5. E inoltre è possibile aggiungere temporaneamente a ApplicationControllerbefore_filter :require_login :), quindi sarà disponibile solo la pagina di accesso al mondo.

Spero che sia d'aiuto!

+0

Grazie per i vostri suggerimenti. Alla fine ho risposto alla mia stessa domanda. La soluzione era nei documenti, solo bisogno di apparire abbastanza difficile. – aaronrussell