Вы можете добраться до Response
и заголовков, используя Http.expectStringResponse
или Http.expectBytesResponse
вместо Http.expectWhatever
.
Вот пример, которыйопределяет вспомогательную функцию expectJWT
, которая будет извлекать и возвращать заголовок Authorization
или, если он не существует, возвращает BadStatus 403
.В postCall
все, что изменилось, это то, что Http.expectWhatever
было заменено на expectJWT
:
expectJWT : (Result Http.Error String -> msg) -> Http.Expect msg
expectJWT toMsg =
Http.expectStringResponse toMsg <|
\response ->
case response of
Http.BadUrl_ url ->
Err (Http.BadUrl url)
Http.Timeout_ ->
Err Http.Timeout
Http.NetworkError_ ->
Err Http.NetworkError
Http.BadStatus_ metadata body ->
Err (Http.BadStatus metadata.statusCode)
Http.GoodStatus_ metadata body ->
metadata.headers
|> Dict.get "Authorization"
|> Result.fromMaybe (Http.BadStatus 403)
postCall : Model -> Cmd Msg
postCall model = Http.post {
url = "http://localhost:9000/register",
body = Http.jsonBody (
Json.Encode.object[
("age", Json.Encode.int 30),
("email", Json.Encode.string model.form.email),
("password", Json.Encode.string model.form.password)
]
),
expect = expectJWT RegistrationSuccess
}