Возможна ли основная ошибка HTTP в Rails? - PullRequest
4 голосов
/ 03 октября 2011

Я создаю приложение в Rails 2.3.14, используя Ruby 1.8.7.

Мой клиент запросил очень простую аутентификацию на странице вебинаров. Я подумал, что использование 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 Ответ

5 голосов
/ 04 октября 2011

Если вы посмотрите на authenticate_or_request_with_http_basic источник , вы увидите следующее:

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

Таким образом, ваш блок login_procedure может делать практически все, что захочет, еслион возвращает true для успешного входа в систему.В частности, он может звонить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...