validar usuario sistema sesion sencillo inicio hacer formulario descargar contraseña como administrador login swift3 http-post

login - usuario - ¿Cómo hacer una solicitud de publicación HTTP con un cuerpo específico? ¿Y cómo acceder al token desde el servidor para permitirme iniciar sesión?



sistema de login php (1)

Tiene problemas para codificar el nombre de usuario y la contraseña en bodyStr actualizarlo a

self.bodyStr = "username=" + actualUsername + "&password=" + actualPassword + "&grant_type=password"

Actualice las declaraciones dentro de do con

do { let tokenDictionary:NSDictionary = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! NSDictionary print(tokenDictionary) // Get the token if let authToken = tokenDictionary["access_token"] as? String{ self.token = authToken UserDefaults.standard.set(accessToken, forKey: "access_token") UserDefaults.standard.synchronize() DispatchQueue.main.async { self.dismiss(animated: true, completion: nil) } } }

Puede implementar una función como isUserLoggedIn que devolverá true si token se guarda en userDefaults. Debes comprobar si el usuario ha iniciado sesión en la applicationdidFinishLaunchingWithOptions Dealer AppleidFinishLaunchingWithOptions .Like

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { if isUserLoggedIn(){ //showHomeViewController } else{ //showLoginViewController } return true } func isUserLoggedIn() -> Bool{ if let accessToken = UserDefaults.standard.object(forKey: "access_token") as? String { if (accessToken.characters.count)! > 0{ return true } else { return false } } else { return false } }

Estoy teniendo un escenario como:

1) Quiero crear la solicitud Http POST y para esto estoy teniendo los datos, por favor mira esta imagen:

2) Como puede ver en la imagen de arriba, tengo que crear una solicitud con el cuerpo mencionado y también recibo una respuesta llamada token. ¿Cómo crear una solicitud posterior y obtener esta respuesta del token ?.

3) Esa respuesta simbólica me permitirá iniciar sesión en myapp.

Soy novato en este escenario. He intentado un poco de código por mi cuenta, pero sigo confundiéndome en cómo combinar mi código de delegado de aplicación con este Código de solicitud de POST.

Código

@IBAction func signinaction(_ sender: Any) { self.username.resignFirstResponder() self.password.resignFirstResponder() if (self.username.text == "" || self.password.text == "") { let alertView = UIAlertController(title: "Login failed", message: "Wrong username or password." as String, preferredStyle:.alert) let okAction = UIAlertAction(title: "Try Again!", style: .default, handler: nil) alertView.addAction(okAction) self.present(alertView, animated: true, completion: nil) return } // Check if the user entered an email if let actualUsername = self.username.text { // Check if the user entered a password if let actualPassword = self.password.text { // Build the body message to request the token to the web app self.bodyStr = "username=8870417698&password=1234&grant_type=password" + actualUsername + "&password=" + actualPassword // Setup the request let myURL = NSURL(string: "http://ezschoolportalapi.azurewebsites.net/token")! let request = NSMutableURLRequest(url: myURL as URL) request.httpMethod = "POST" request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("application/json", forHTTPHeaderField: "Accept") request.httpBody = bodyStr.data(using: String.Encoding.utf8)! let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) -> Void in if data?.count != 0 { do { let tokenDictionary:NSDictionary = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! NSDictionary print(tokenDictionary) // Get the token let token:String = tokenDictionary["access_token"] as! String // Keep record of the token let userdefaults = UserDefaults() let saveToken = userdefaults.set(token, forKey: "access_token") userdefaults.synchronize() // Dismiss login view and go to the home view controller DispatchQueue.main.async { self.dismiss(animated: true, completion: nil) } } catch { // Wrong credentials // Reset the text fields self.username.text = "" self.password.text = "" // Setup the alert let alertView = UIAlertController(title: "Login failed", message: "Wrong username or password." as String, preferredStyle:.alert) let okAction = UIAlertAction(title: "Try Again!", style:.default, handler: nil) alertView.addAction(okAction) self.present(alertView, animated: true, completion: nil) return } } } task.resume() } } }

La pregunta es cómo combinar este código con mi código anterior:

let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.gotoMainvc()

si utilizo este código directamente, en cualquiera de los casos puedo cambiar a la pantalla de inicio, no importa si estoy usando este código de solicitud POST o no. Por favor ayuda.