Rails中可能出现HTTP基本自定义错误?

时间:2011-10-03 15:48:01

标签: ruby-on-rails ruby authentication http-basic-authentication

我正在使用Ruby 1.8.7在Rails 2.3.14中构建一个应用程序。

我的客户已在网络研讨会页面上请求了一个非常简单的身份验证。 我认为使用http_auth非常合适,因为它只需要一个非常基本的用户名和密码。

现在,她要求如果他们点击取消或使用错误信息,他们会被重定向到一个页面,基本上说“如果您忘记了登录信息,请与我们联系。”

当我们得到“HTTP Basic:访问被拒绝”时,我该怎么做呢?错误,我可以改为重定向到一个页面?或者,只需使用我们的自定义样式/内容自定义此页面?

提前致谢。

以下是我的网络研讨会控制器的代码:

class WebinarsController < ApplicationController
before_filter :authenticate, :only => [:bpr]

def bpr
 render :action => :bpr
end

protected 
def authenticate
  authenticate_or_request_with_http_basic do |username, password|
    username == "abc" && password == "123"
  end
end

end

1 个答案:

答案 0 :(得分:5)

如果查看authenticate_or_request_with_http_basic source,您会看到:

def authenticate_or_request_with_http_basic(realm = "Application", &login_procedure)
  authenticate_with_http_basic(&login_procedure) || request_http_basic_authentication(realm)
end

def authenticate_with_http_basic(&login_procedure)
  HttpAuthentication::Basic.authenticate(request, &login_procedure)
end

#...

def authenticate(request, &login_procedure)
  unless request.authorization.blank?
    login_procedure.call(*user_name_and_password(request))
  end
end

因此,只要成功登录返回true,您的login_procedure块就可以执行它想要的任何操作。特别是,它可以调用redirect_to

def authenticate
  authenticate_or_request_with_http_basic do |username, password|
    if(username == "abc" && password == "123")
      true
    else
      redirect_to '/somewhere/else/with/instructions'
    end
  end
end