Vapor3.0에서 Leaf 템플릿에서 HTML을 피하지 않고 내보내려는 경우

2691 단어 SwiftVaporVapor3.0
예를 들어 Mardown의 HTML을 변환하는 등 HTML을 피하지 않고 원래 HTML을 Leaf 템플릿에 직접 삽입하는 경우입니다.
Vapor2.0까지 #raw() 라벨이 있는데 그걸 사용해서 이루어졌는데 없어졌어요.

결론

text HTML 문자열로
#(text)
아니오.
#get(text)
이렇게 하면 OK야.XSS 주의

사족


#get() 이런 게 있는지 몰랐어 (Vaper의 Discord를 보고 알았지) 아직까지 사용자 정의 태그까지 만들어놓고... 정말 쓸데없는 짓을 한 거야...
import Leaf

public final class RawTag: TagRenderer {
    public func render(tag parsed: TagContext) throws -> Future<TemplateData> {
        try parsed.requireParameterCount(1)
        return Future.map(on: parsed.container) {
            if let string = parsed.parameters[0].string {
                return .string(string)
            } else {
                return .null
            }
        }
    }
}

좋은 웹페이지 즐겨찾기