Когда вы используете Rack::Auth::Basic
через use
, вы фактически вставляете его в цепочку обработки запросов.Это попытается авторизовать все запросы.Чтобы использовать его выборочно, только на определенных путях, вам нужно выполнять аутентификацию только на соответствующих конечных точках (действиях) запроса.Что-то вроде -
# helpers in ApplicationController
def authorized?
@auth = Rack::Auth::Basic::Request.new(request.env)
@auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['username', 'password']
end
def username(username)
@auth.credentials[0]
end
# action in PostsController
def index
if authorized?(params[:id]) && username == "admin"
# protected stuff
else
render :text => "unauthorized"
end
end
Ссылка: Sinatra doc
Хотя этот вид аутентификации может быть обработан намного лучше, если использовать полный подход к учетной записи пользователя и сеанс.Оформить заказ has_secure_password в рельсах 3.1 или devise .