有 401 尝试从 URLSession 请求登录

问题描述

我有这个方法


func loginUser(for email: String,password: String,completed: @escaping (Result<LoginModel,Error>) -> Void) {
        let endpoint = baseURL + "login"

        guard let url = URL(string: endpoint) else {
            completed(.failure(.invalidURL))
            return
        }

        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        let body = ["email": email,"password": password]
        let jsonData = try? JSONSerialization.data(withJSONObject: body)
        request.httpBody = jsonData
        
        

        let task = URLSession.shared.dataTask(with: request) { data,response,error in
            if let _ = error {
                completed(.failure(.unabletoComplete))
                return
            }

            guard let response = response as? HTTPURLResponse,response.statusCode == 200 else {
                completed(.failure(.unabletoComplete))
                return
            }

            guard let data = data else {
                completed(.failure(.invalidData))
                return
            }

            do {
                let decoder = JSONDecoder()
                decoder.keyDecodingStrategy = .convertFromSnakeCase
                let data = try decoder.decode(LoginModel.self,from: data)
                completed(.success(data))
            } catch {
                completed(.failure(.invalidData))
            }
        }

        task.resume()
    }


但是我尝试登录用户(电子邮件和密码)我得到一个状态代码 401,这是检查响应时的所有信息。

调用这个方法

NetworkManager.shared.loginUser(for: emailTextField.text!,password: passwordtextField.text!) { result in
            switch result {
            case .success(let data):
                print(data)
            case .failure(let error):
                print(error.rawValue)
            }
        }
<NSHTTPURLResponse: 0x60000181ca80> { URL: https://basee-url/api/login } { Status Code: 401,Headers {
    "Access-Control-Allow-Origin" =     (
        "*"
    );
    "Cache-Control" =     (
        "no-cache,private"
    );
    Connection =     (
        "keep-alive"
    );
    "Content-Type" =     (
        "application/json"
    );
    Date =     (
        "Mon,21 Jun 2021 20:11:46 GMT"
    );
    Server =     (
        Apache
    );
    "transfer-encoding" =     (
        Identity
    );
    Via =     (
        "1.1 vegur"
    );
    "X-Ratelimit-Limit" =     (
        60
    );
    "X-Ratelimit-Remaining" =     (
        59
    );
} }

这是在 Postman 中执行的请求

enter image description here

解决方法

我把问题的解决方案留在这里。 Swift 代码的问题在于请求没有设置应用程序/杰森标题。因为我发的是json格式的body。

Into sam_can.h class SAM_CAN { public: private: static uint32_t can_msg_ram[MSG_RAM_SIZE] __attribute__((section(".canram"))); }; cam_can.cpp enum can_status SAM_CAN::begin() { struct can_config can_cfg = { id : _canid,// Peripheral ID regs : #ifndef ID_CAN1 CAN0,// Offset to registers #else ((_canid == ID_CAN0) ? CAN0 : CAN1),// Offset to registers,switch between CAN0 and CAN1 #endif msg_ram : can_msg_ram,// Pointer to start of Canram .... }; 方法添加了这一行

loginUser

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...