Как объединить обработчики аутентификации Plack?

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

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

Как это обычно решается в Plack?


person Schwern    schedule 11.01.2011    source источник
comment
У меня нет ответа для вас, но разве 404 не совсем подходит для этого?   -  person ysth    schedule 11.01.2011
comment
Верно, 40one11111 (проклятый лимит комментариев)   -  person Schwern    schedule 11.01.2011
comment
@ysth Да, это одна из вещей, которые предложил Миягава, когда я спросил его. Что еще более важно, я более глубоко перерабатываю этот проект, чтобы он не требовал эффективного написания собственной структуры на необработанном Plack, чтобы соответствовать его историческим причудам. Затем я могу использовать Catalyst или Dancer или что-то в этом роде.   -  person Schwern    schedule 20.01.2011


Ответы (2)



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

person ysth    schedule 11.01.2011