繁体   English   中英

如何从iOS应用中的Node.js服务器获取响应?

[英]How do i get the response from Node.js server in iOS app?

我有一个Node.js服务器,当用户登录时,该服务器发送JWT(JSON Web令牌)作为响应。如何在我的Swift 4 iOS应用中获取响应?

func handleLogin() {

    guard let username = usernameTextField.text, let password = 
    passwordTextField.text else {
        print("Invalid form")
        return
    }

    guard let url = URL(string: "http://localhost:3000/users/authenticate") 
    else { return }

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

    let authUser = Login(username: username, password: password)
    do {
        let jsonBody = try JSONEncoder().encode(authUser)
        request.httpBody = jsonBody
    } catch {}

    let session = URLSession.shared
    let task = session.dataTask(with: request)

    task.resume()
}

它将用户名和密码发送到服务器,但是从这里如何获得响应? 响应是一个JWT令牌,如何将其存储在哪里?

这是结构。

struct Login: Encodable {
    let username: String
    let password: String
}

struct User: Decodable {
    let id: Int
    let username: String
    let email: String
}

struct Response: Decodable {
    let token: String
    let user: User
}

根据帖子,我猜您的回复将采用以下格式:

{
    "token": "JWT 2424234234234",
    "user": {
        "id": 1,
        "username": "user.username",
        "email": "user.email"
    }
}    

对于上述JSON,您必须像下面这样进行解码:

struct Response: Codable {
    let token: String
    let user: User
}
struct User: Codable {
    let id: Int
    let username: String
    let email: String
}

let session = URLSession.shared
let task = session.dataTask(with: request) { (data, _, _) in
    guard let data = data else { return }
    do {
        let sentPost = try JSONDecoder().decode(Response.self, from: data)
        print(sentPost.token)
        print(sentPost.user.id)
        print(sentPost.user.username)
        print(sentPost.user.email)
    } catch {}
}
task.resume()
let session = URLSession.shared
    let task = session.dataTask(with: request) { (data, _, _) in
        guard let data = data else { return }
        do {
            let _ = try JSONDecoder().decode(Response.self, from: data)
        } catch {
            print(String(data: data, encoding: .utf8)!)
        }
    }
    task.resume()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM