2010-05-17 10 views
5

Je suis dans les premiers stades de la construction d'une application utilisant Rails 3. Authentification de l'utilisateur est alimenté par Authlogic que j'ai installé à peu près comme standard (as per the example docs) et tout fonctionne comme prévu localement.Rails 3, authentification de base Authlogic, NGINX et HTTP ne fonctionnent pas bien ensemble

Je viens de déployer l'application sur une installation serveur propre de Centos 5.4/NginX/Passenger afin que le personnel puisse commencer à se connecter et entrer du contenu, etc. Cependant, nous sommes loin d'être prêts pour les yeux du public J'ai donc utilisé le module d'authentification de base de NginX pour garder tout le site derrière un autre niveau d'authentification.

Malheureusement, l'authentification d'Authlogic et l'authentification de base de NginX semblent être en conflit les unes avec les autres. Si l'authentification de base est activée, il est impossible de se connecter avec Authlogic, mais si je désactive l'authentification de base, Authlogic fonctionne comme prévu.

Je n'ai pas posté de code car je ne sais pas vraiment quel code serait pertinent. Je me demande s'il s'agit d'un problème connu et s'il y a des changements que je peux apporter à la configuration pour contourner le problème?

Répondre

13

Je peux répondre à ma propre question (après plusieurs heures de recherche complètement au mauvais endroit). Une bonne lecture sur Authlogic::Session::Config a fait l'affaire.

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

Wow .. si heureux j'ai trouvé ceci - j'ai essayé de résoudre ce problème pendant environ 3 jours maintenant. Merci! – zaius

+0

Merci beaucoup m'a aidé. –

+0

Merci beaucoup! – dangerousdave

1

Je n'ai toujours pas essayé Rails 3, donc ma réponse sera plus générale. Et je ne connais pas le module d'authentification de base pour NginX.

  1. Si votre équipe est connectée localement, vous pouvez créer un serveur accessible à partir du réseau local uniquement.
  2. Si vous avez besoin d'un accès via Internet, vous pouvez le masquer derrière un VPN.
  3. Vous pouvez définir l'accès au site uniquement via l'adresse IP locale et donner un accès SSH à quiconque en a besoin. Il est facile de créer un proxy de chaussettes via ssh (sous linux: ssh -D 8080 [email protected], où 8080 est le numéro de port, puis paramétrez le proxy des chaussettes dans le navigateur et vous pouvez déjeunez yoursever.com:3000).
  4. Je pense que NginX vous permet de définir des adresses IP autorisées et d'en refuser d'autres - vous pouvez donc également l'utiliser pour restreindre l'accès.
  5. Et aussi vous pouvez ajouter temporairement à ApplicationControllerbefore_filter :require_login :), de sorte que seule la page de connexion sera disponible au monde.

Espérons que ça aide!

+0

Merci pour vos suggestions. En fin de compte, j'ai répondu à ma propre question. La solution était dans les docs, juste besoin de regarder assez fort. – aaronrussell