Gửi một yêu cầu HTTP với xác thực cơ bản

Elm:
Gửi một yêu cầu HTTP với xác thực cơ bản

Làm thế nào:

Elm tạo yêu cầu HTTP sử dụng gói Http. Để thêm xác thực cơ bản, bạn mã hóa thông tin đăng nhập và bao gồm chúng trong tiêu đề yêu cầu.

import Http
import Base64

type alias Model = { ... }
type Msg = HttpRequestCompleted (Result Http.Error String)

-- Mã hóa tên đăng nhập và mật khẩu
basicAuthHeader : String -> String -> Http.Header
basicAuthHeader username password =
    let
        credentials = username ++ ":" ++ password
        encodedCredentials = Base64.encode credentials
    in
    Http.header "Authorization" ("Basic " ++ encodedCredentials)

-- Thực hiện yêu cầu HTTP
sendRequestWithBasicAuth : Cmd Msg
sendRequestWithBasicAuth =
    let
        url = "https://example.com/protected/resource"
        request =
            Http.request
                { method = "GET"
                , headers = [ basicAuthHeader "myUsername" "myPassword" ]
                , url = url
                , body = Http.emptyBody
                , expect = Http.expectString (HttpRequestCompleted)
                , timeout = Nothing
                , tracker = Nothing
                }
    in
    Http.send HttpRequestCompleted request

Khi hàm trên được gọi, Elm sẽ thực hiện một yêu cầu GET đến URL đã chỉ định với tiêu đề Authorization được thiết lập là tên đăng nhập và mật khẩu đã mã hóa.

Tìm hiểu sâu hơn

Cách tiếp cận của Elm đối với yêu cầu HTTP phản ánh triết lý chung của ngôn ngữ: an toàn, dễ bảo trì và dễ hiểu. Gói Http bao bọc yêu cầu theo cách xử lý với kiến trúc Elm.

Xác thực cơ bản cũ như chính web vậy, là một phần của quy specification HTTP ban đầu (RFC 7617). Nó đơn giản nhưng không rất an toàn vì thông tin đăng nhập chỉ được mã hóa base64, không được mã hóa. Vì vậy, rất quan trọng phải sử dụng HTTPS để mã hóa truyền dẫn.

Các phương án thay thế cho xác thực cơ bản bao gồm OAuth, tokens như JWT, hoặc API keys, mỗi phương án đều đem lại độ phức tạp và bảo mật được cải thiện hơn. Elm cũng hỗ trợ những phương pháp này nhưng thường yêu cầu các gói bổ sung hoặc bộ mã hóa và giải mã tùy chỉnh.

Xem thêm