2016-03-02 15 views
1

Я строю маршруты по методу ~. Некоторые из моих маршрутов окружены директивой authenticate, которая при некоторых обстоятельствах возвращает отклонения. У меня есть неявный обработчик отклонения в рамках метода runRoute.Как применять директиву аутентификации только по нескольким маршрутам

Как применить эту директиву только к маршрутам, окруженным этой директивой? В отказеHandler я выполняю перенаправление на путь, который не окружен директивой аутентификации. В отладки я понял, что второй запрос (после переадресации) также проходит через мой contextAuthenticator

EDIT Пример использования authenticate директивы

val securedRoutes = authenticate(myContextAuthenticator) { implicit user => 
    route1 ~ 
    route2 
} 

Здесь myContextAuthenticator имеет тип ContextAuthenticator[User]

и receive метод является

def receive = runRoute { 
    otherRoutes ~ securedRoutes 
} 
+0

Можете ли вы привести пример того, как вы используете 'authenticate' директиву? –

+0

Я добавил пример – maks

ответ

2

неявной обработчик отвержения подходит для невосстанавливаемых, глобальных отказов, которые должны быть конвертированы соответствующими ответы HTTP, как 400 или 404.

Однако, если вам нужно обработать отказы, характерные для маршрута, в Вашем случае подлинности маршрутов, спрейте имеет handleRejections директивы.

Простое использование было бы так:

val authenticatedRoute = handleRejections(myAuthenticatorRejectionHandler) & 
    authenticate(myContextAuthenticator) 

val securedRoutes = authenticatedRoute { implicit user => 
    route1 ~ 
    route2 
} 
+0

странно, но в моем случае неявный обработчик отклонения всегда имеет приоритет для маршрутов, определенных как в вашем примере – maks

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^