- Vapor - middleware2024년 03월 21일
- 2료일
- 작성자
- 2024.03.21.:05
클라이언트(즉 아이폰)에서 서버로 요청을 보낸다. 근데 그 서버에 닿기 직전에 이 벽(미들웨어)를 거쳐서 지나간다.
ex) Authentication 미들웨어는 유저가 어? 너 회원이야? 아니야? 판단을 할수 있음!!
code로 보자 routes파일에다가 app.middleware.use(LogMiddleware())이거만 해주면 어떠한 우리가 요청을보내든 Log middleware가 찍히는것을 볼 수 있다. 주의행할것은 next.respond(to: request)를 해주지 않는다면 절대 우리가 가려던 곳에 reach할수 없어용
이제 아까 예시를 들었던 유효한 토큰이 있을때만 서버를 통신하도록 하는 코드를 작성해보자!!
struct AuthenticationMiddleware: AsyncMiddleware { func respond(to request: Request, chainingTo next: any AsyncResponder) async throws -> Response { // Headers: Authorization: Bearer EDFDFJOIJ guard let authorization = request.headers.bearerAuthorization else { throw Abort(.unauthorized) } print(authorization.token) return try await next.respond(to: request) } }
vapor에 다 있어서 갖다쓰면댐. request.headers.bearerAuthorzation이 없다면!! unauthorized에러를 던져주고 아니면 다음동작을 하게끔 해주면 된다.
그러면 우리는 이 middleware를 아까처럼 모든요청에 다 검사하는것이 아닌 특정한 경우에만 통과해서 가게 하려면 어떻게 해야할까?
// /members app.grouped(AuthenticationMiddleware()).group("members") { route in route.get { req async -> String in return "MEMBERS INDEX" } route.get("hello") { req async -> String in return "MEMBERS HELLO" } }
이런식으로 써주면 된다. 우리가 이전에 했던것은 group이라는 것을 통해 도메인의 주소를 모아뒀다면 grouped라는 얘는 여기들어오는애는 이 미들웨어를 거쳐서 갈꺼야~라고 설명하는것과 같다. 이러면 헤더에 bearercode가 있는 요청만 성공적으로 가게 된다. 아니면 다 abort 에러뜸
'Vapor-Server with swift' 카테고리의 다른 글
Vapor - routes관리 (0) 2024.03.20 Vapor-Swift로 서버구축하기 (0) 2024.03.20 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)