Невозможно перенаправить на URL-адрес с помощью Server Side Swift Perfect

Я использую фреймворк Server Side Swift Perfect для веб-сервисов. Модуль Mustache для обслуживания статического/динамического контента.

Я хочу реализовать функцию входа в систему после перенаправления на домашнюю страницу при успешной аутентификации. «Я искал везде, но не нашел такой функции, которая бы перенаправляла на URL-адрес»

Вот код, который я использую для реализации входа в систему:

func signin(request:HTTPRequest, response: HTTPResponse) {
    do {
        var errorMessage:String;
        var values = MustacheEvaluationContext.MapType()
        let email:String = request.param(name: "email")!
        let password:String = request.param(name: "password")!
        print("Email -> \(email) & Password -> \(password)")
        //After Authentication
        //Yay I want to go back to home page.
        mustacheRequest(request: request, response: response, handler: MustacheHelper(values: values), templatePath: webroot + "/index.html")
        // Sadly this doesn't work, it just renders the homepage without changing the url or 'without redirecting'
        response.completed()
} catch {
        print(error)
        logError(error.localizedDescription)
        response.setBody(string: "An error occured \(error)").completed()
    }
}

Я думаю, что компания PerfectlySoft забыла поставить эту функцию. Может быть, я должен сообщить об этом. Кто-нибудь знает, что может быть решением моей проблемы? Расскажите пожалуйста. Спасибо.


person Master AgentX    schedule 01.09.2018    source источник


Ответы (1)


Наконец-то я сам нашел решение. Эта функция перенаправления URL-адресов не включена в сам модуль PerfectHTTP или PerfectHTTPServer. Вам нужно импортировать другой модуль -> Perfect-OAuth2 от PerfectlySoft. Метод перенаправления объявлен непосредственно в расширении HTTPResponse. ИЛИ вы можете сделать это, добавив свой собственный, как это,

extension HTTPResponse {
    public func redirect(path: String) {
        self.status = .found
        self.setHeader(.location, value: path)
        self.completed()
    }
}

Надеюсь, это поможет!

person Master AgentX    schedule 01.09.2018
comment
Большое спасибо! Вы спасли мой день ???? - person Alexey Plekhanov; 30.07.2020
comment
Идеальная структура дала мне толчок для быстрого запуска на стороне сервера, но я больше не использую эту среду, поскольку ее конкурент (Vapor) постоянно обновляет и работает над последними низкоуровневыми быстрыми API. Я не знаю о будущем этого фреймворка Perfect. Я предлагаю вам использовать фреймворк Vapor 4 vapor.codes. Теперь он официально выпущен. - person Master AgentX; 30.07.2020