Я создал базовую функцию входа в систему, используя HTTP-метод POST. Учетные данные успешно отправлены и проверка подлинности сервера успешно. httpResponse.statusCode
передается и печатается в консоли. Я пытаюсь сделать Alert httpResponse.statusCode
равным 400 и загрузить новое представление, если оно равно 200. Это код, который я использую;
Button(action: {
let login = self.username
let passwordstring = self.password
guard let url = URL(string: "http://localhost:8000/account/auth/") else {return}
let headers = [
"Content-Type": "application/x-www-form-urlencoded",
"cache-control": "no-cache",
"Postman-Token": "89a81b3d-d5f3-4f82-8b7f-47edc39bb201"
]
let postData = NSMutableData(data: "username=\(login)".data(using: String.Encoding.utf8)!)
postData.append("&password=\(passwordstring)".data(using: String.Encoding.utf8)!)
let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:8000/account/auth/")! as URL,
cachePolicy:.useProtocolCachePolicy, timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) in
if let httpResponse = response as? HTTPURLResponse {
guard let data = data else {return}
print(data)
if httpResponse.statusCode == 200{
DispatchQueue.main.async {
//Segue to new view goes here
print(httpResponse.statusCode)
AreaView().animation(.easeIn)
}
}else{
if httpResponse.statusCode == 400{
DispatchQueue.main.async {
Alert(title: Text("Oops"), message: Text("Username or Password Incorrect"), dismissButton: .default(Text("Got it!")))
print(httpResponse.statusCode)
}
}else{
DispatchQueue.main.async {
Alert(title: Text("Well Damn"), message: Text("Ay chief we have no idea what just happened but it didn't work"), dismissButton: .default(Text("Got it!")))
}
}
}
do{
let JSONFromServer = try JSONSerialization.jsonObject(with: data, options: [])
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let tokenArray = try decoder.decode(token.self, from: data)
print(tokenArray.token)
UserDefaults.standard.set(tokenArray.token, forKey: "savedToken")
let savedToken = UserDefaults.standard.object(forKey: "savedToken")
print(savedToken)
}catch{
if httpResponse.statusCode == 400{
Alert(title: Text("Oops"), message: Text("Username or Password Incorrect"), dismissButton: .default(Text("Got it!")))
}
print(error)
print(httpResponse.statusCode)
}
} else if let error = error {
Alert(title: Text("Well Damn"), message: Text("Ay chief we have no idea what just happened but it didn't work"), dismissButton: .default(Text("Got it!")))
print(error)
}
})
dataTask.resume()
})//end of login function
{
Image("StartNow 3").resizable()
.scaledToFit()
.padding()
}
.padding(.horizontal, 15).offset(y: -50)
AlertView не выскакивает и AreaView()
тоже не загружается. Единственная команда, которая работает в операторе if, это print. Я попытался найти причину, но SwiftUI слишком нов. Консоль также не выдает никаких сообщений об ошибках. Стоит отметить, что мой код был сгенерирован PostMan. Любая помощь приветствуется.