2016-11-27 12 views
2

Я пытаюсь использовать Vapor AuthMiddleware для двух субъектов: Заказчика и торговыхКак использовать AuthMiddleware для нескольких объектов?

https://vapor.github.io/documentation/auth/request.html

let auth = AuthMiddleware(user: Customer.self) { value in 
       return Cookie(
        name: "vapor-auth", 
        value: value, 
        expires: Date().addingTimeInterval(60 * 60 * 5), 
        secure: true, 
        httpOnly: true 
       ) 
      } 

Но, как я вижу, первый добавили промежуточный слой (Заказчик) был заменен на второй (Торговец), если они добавили:

drop?.middleware.append(auth) 

o г

drop?.addConfigurable(middleware: auth, name: "auth") 

Так что, если я пытаюсь войти в систему с помощью учетных данных из запроса:

guard let login = req.data["login"]?.string, 
    let password = req.data["password"]?.string else { 
     throw Abort.badRequest 
} 
let credentials = APIKey(id: login, secret: password) 
try req.auth.login(credentials) 

У меня есть ошибка:

▿ Abort 
▿ custom : 2 elements 
    - .0 : HTTP.Status.badRequest 
    - .1 : "Invalid credentials." 

Но он бросает только для первых добавленного объекта, который AuthMiddleware был заменен другим AuthMiddleware ...

Пожалуйста, дайте мне знать, если можно решить эту проблему Эм. Спасибо!

ответ

2

Вы можете сделать что-то вроде этого:

drop.group(AuthMiddleware()) { authed in 
    authed.get("endpoint") { req in 
    return "" 
    } 
} 

Все, что вы положили внутри группы (и используется authed для создания конечных точек с) будет использовать AuthMiddleware().

+0

Спасибо! Ты прав. Мне просто нужно использовать ** drop.grouped («клиент»). Grouped (auth) ** intead of ** drop.addConfigurable (middleware: auth, name: "auth") ** –