Доступ к стойке маршрута в config.ru - PullRequest
0 голосов
/ 01 марта 2012

Я использую Basic Auth для аутентификации в моем config.ru.В блоке Auth Basic я хочу получить и идентификатор из пути и проверить, есть ли у пользователя права на просмотр пути.Тем не менее, я не могу понять, как получить доступ к пути.

use Rack::Auth::Basic do |username, password|
  # access path here
end

Есть идеи?

1 Ответ

0 голосов
/ 01 марта 2012

Когда вы используете 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 .

...