Как мне сложить обработчики аутентификации Plack? - PullRequest
5 голосов
/ 11 января 2011

Я бы хотел, чтобы мое приложение Plack попробовало несколько разных способов авторизации пользователя.В частности, проверьте, авторизован ли пользователь уже через файл cookie сеанса, затем проверьте дайджест-аутентификацию, а затем вернитесь к Basic.

Я подумал, что могу просто включить несколько обработчиков Auth в том порядке, в котором я хотел ихбыть проверенным (Session, Digest, Basic).К сожалению, при написании Plack :: Middleware :: Auth :: Digest и Plack :: Middleware :: Auth :: Basic они оба возвращают 401, если дайджест или базовая аутентификация не выполняется.соответственно не существует.

Как с этим обычно справляются в Plack?

Ответы [ 2 ]

4 голосов
/ 17 января 2011

У меня нет реализации, но я думаю, что у меня есть подход.Вы можете сделать это "in-line" с помощью Plack :: Middleware :: Conditional .Так что это будет выглядеть так, но вам придется заполнить пропущенные условия / тесты.Я не видел простой / очевидный способ, но я подозреваю, что вы могли бы.Поскольку у вас есть $env для передачи, вы должны иметь возможность устанавливать / проверять HTTP_ / сессионный материал в нужном вам порядке и сохранять состояние следующего обработчика, чтобы знать, должен ли он быть включен или нет.*

2 голосов
/ 11 января 2011

Я думаю, вам нужно написать свое собственное промежуточное программное обеспечение, поскольку в идеале (основываясь на очень быстром чтении RFC 2617 ), когда нет аутентификации, вы должны возвращать заголовок WWW-Authenticate с Basic иДайджест задач (сначала с Basic, для пользовательских агентов, которые понимают только Basic).

...