Rails 3,Authlogic,NGINX和HTTP基本身份验证不能很好地协同工作

时间:2010-05-17 17:42:15

标签: ruby-on-rails nginx authlogic basic-authentication

我正处于使用Rails 3构建应用程序的早期阶段。用户身份验证由Authlogic提供支持,我已将其设置为标准(as per the example docs),并且所有内容都按预期在本地运行。

我刚刚将应用程序部署到Centos 5.4 / NginX / Passenger的干净服务器安装中,因此工作人员可以开始登录并输入内容等。但是,我们还有很长的路要走,因为这对公众来说已经准备好了所以我使用了NginX的基本身份验证模块来保持整个网站的另一级身份验证。

不幸的是,Authlogic的身份验证和NginX的基本身份验证似乎相互冲突。如果基本身份验证已启用,则无法使用Authlogic登录,但如果禁用基本身份验证,则Authlogic将按预期工作。

我还没有发布任何代码,因为我真的不确定哪些代码是相关的。我想知道这是否是一个已知问题,如果我可以对配置进行任何更改以解决问题?

2 个答案:

答案 0 :(得分:13)

我可以回答我自己的问题(在完全错误的地方看了几个小时之后)。 Authlogic::Session::Config上的一个很好的读数就可以了。

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

答案 1 :(得分:1)

我仍然没有尝试过Rails 3,所以我的回答会更一般。我不知道NginX的基本身份验证模块。

  1. 如果您的团队是localy,那么您可以创建仅可从本地网络访问的服务器。
  2. 如果您需要通过互联网访问,则可以将其隐藏在VPN后面。
  3. 您只能通过本地IP设置对网站的访问权限,并为任何需要它的人提供ssh访问权限。通过ssh很容易创建socks代理(在linux中:ssh -D 8080 user@yourserver.com;其中8080​​是端口号,然后在浏览器中设置socks代理,你可以在yoursever.com:3000午餐)。
  4. 我认为NginX允许您设置允许的IP并拒绝其他IP - 因此您也可以将其用于访问限制。
  5. 此外,您还可以临时添加到ApplicationController before_filter :require_login :),因此只有登录页面可以提供给全世界。
  6. 希望它有所帮助!