我是榆树的新手, 我有一个登录api,它在其hedears中返回一个JWT令牌
curl http://localhost:4000/api/login?email=bob@example&password=1234
响应:
HTTP/1.1 200 OK
authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXyLp0aSI6ImefP2GOWEFYWM47ig2W6nrhw
x-expires: 1499255103
content-type: text/plain; charset=utf-8
success
现在我正在尝试编写一个函数来发送请求并从elm
中的标头返回令牌authUser =
Http.send "http://localhost:4000/api/login?email=bob@example&password=1234"
我该如何以简单的方式做到这一点?
答案 0 :(得分:11)
要从回复中提取标头,您必须使用Http.request
以及expectStringResponse
功能,其中包括包含标头的完整回复。
expectStringResponse
函数的值为Http.Response a
,因此我们可以创建一个接受标题名称和响应的函数,然后根据是否返回Ok headerValue
或Err msg
标题被找到:
extractHeader : String -> Http.Response String -> Result String String
extractHeader name resp =
Dict.get name resp.headers
|> Result.fromMaybe ("header " ++ name ++ " not found")
这可以由请求构建器使用,如:
getHeader : String -> String -> Http.Request String
getHeader name url =
Http.request
{ method = "GET"
, headers = []
, url = url
, body = Http.emptyBody
, expect = Http.expectStringResponse (extractHeader name)
, timeout = Nothing
, withCredentials = False
}
Here is an example on ellie-app.com
返回content-type
的值作为示例。您可以将"authorization"
替换为您的目的。
答案 1 :(得分:3)
我谦虚地建议你看看我的elm-jwt库,以及那里的get函数吗?
Jwt.get token "/api/data" dataDecoder
|> Jwt.send DataResult
JWT令牌通常需要作为Authorization
标头发送,此功能可帮助您创建可传递给Http.send
或Jwt.send