如何为多个实体使用 AuthMiddleware?
How to use AuthMiddleware for more than one entity?
我尝试将 Vapor AuthMiddleware 用于两个实体:Customer 和 Merchant
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)
或
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 替换...
如果可以解决这个问题,请告诉我。
谢谢!
你可以这样做:
drop.group(AuthMiddleware()) { authed in
authed.get("endpoint") { req in
return ""
}
}
您放入组内的任何内容(并使用 authed
创建端点)都将使用 AuthMiddleware()
.
我尝试将 Vapor AuthMiddleware 用于两个实体:Customer 和 Merchant
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)
或
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 替换...
如果可以解决这个问题,请告诉我。 谢谢!
你可以这样做:
drop.group(AuthMiddleware()) { authed in
authed.get("endpoint") { req in
return ""
}
}
您放入组内的任何内容(并使用 authed
创建端点)都将使用 AuthMiddleware()
.