iOS
...
Users
Guía de Inicio de Sesión con ParseSwift SDK en iOS
11 min
inicio de sesión y cierre de sesión del usuario introducción en la guía de registro de usuario https //www back4app com/docs/ios/parse swift sdk/users/user registration aprendimos cómo integrar una opción de registro en una aplicación ios utilizando la plataforma back4app y el parseswift sdk parseswift sdk una vez que un usuario se registre con éxito en tu aplicación, las acciones de inicio y cierre de sesión son características clave dentro del flujo de la aplicación el parseswift sdk parseswift sdk nos permitirá integrar estas características sin problemas en cualquier aplicación ios requisitos previos para completar este inicio rápido, necesitas xcode una aplicación creada en back4app sigue el tutorial de nueva aplicación parse para aprender cómo crear una aplicación parse en back4app nota sigue el tutorial de instalación del sdk de parse (swift) para crear un proyecto xcode conectado a back4app objetivo implementar una función de inicio y cierre de sesión de usuario utilizando el parseswift sdk y la plataforma back4app 1 configuración de las funciones de inicio y cierre de sesión antes de comenzar a implementar cualquier funcionalidad de inicio de sesión, tenemos que crear el objeto que representará al usuario para simplificar, reutilizaremos la misma usuario usuario estructura (que se ajusta al parseuser parseuser protocolo) que introdujimos en la guía de registro de usuarios https //www back4app com/docs/ios/parse swift sdk/users/user registration import foundation import parseswift struct user parseuser { var username string? var email string? var emailverified bool? var password string? var age int? } recomendamos seguir la guía de registro de usuarios y registrar al menos un usuario para usarlo como ejemplo para esta guía similar al proceso de registro, iniciar sesión requiere un formulario donde el usuario ingresa su nombre de usuario y contraseña luego, realizamos una solicitud de inicio de sesión utilizando los métodos correspondientes proporcionados por el parseswift sdk parseswift sdk a su vez, back4app procesa la solicitud y devuelve una respuesta que contiene la información de inicio de sesión cuando ocurre un error, la respuesta devuelve información para identificar y manejar este error el proceso de cierre de sesión es sencillo el parseswift sdk parseswift sdk nos permite implementarlo en una sola línea de código 2 configurando la aplicación una vez que conectaste https //www back4app com/docs/ios/parse swift sdk/install sdk tu proyecto de xcode a tu back4app aplicación, el siguiente paso es configurar la interfaz de usuario de la aplicación para el proceso de inicio de sesión, implementaremos un controlador simple que contenga los campos de entrada correspondientes y un botón de inicio de sesión la clase encargada de este formulario se llama logincontroller y es una subclase de uiviewcontroller los componentes clave para integrar en este controlador son dos uitextfield y un uibutton el siguiente fragmento muestra la implementación de la clase logincontroller 1 import uikit 2 import parseswift 3 4 class logincontroller uiviewcontroller { 5 private let usernametextfield uitextfield = { 6 let textfield = uitextfield() 7 textfield borderstyle = roundedrect 8 textfield placeholder = "username " 9 textfield autocapitalizationtype = none 10 textfield textalignment = center 11 return textfield 12 }() 13 14 private let passwordtextfield uitextfield = { 15 let textfield = uitextfield() 16 textfield borderstyle = roundedrect 17 textfield issecuretextentry = true 18 textfield placeholder = "password " 19 textfield textalignment = center 20 return textfield 21 }() 22 23 private let loginbutton uibutton = { 24 let button = uibutton(type roundedrect) 25 button settitle("log in", for normal) 26 return button 27 }() 28 29 override func viewdidload() { 30 super viewdidload() 31 32 navigationitem title = "back4app log in" 33 34 // lays out the login form 35 let stackview = uistackview(arrangedsubviews \[usernametextfield, passwordtextfield, loginbutton]) 36 stackview\ translatesautoresizingmaskintoconstraints = false 37 stackview\ spacing = 8 38 stackview\ axis = vertical 39 stackview\ distribution = fillequally 40 41 let stackviewheight = cgfloat(stackview\ arrangedsubviews count) (44 + stackview\ spacing) stackview\ spacing 42 43 view\ addsubview(stackview) 44 stackview\ centerxanchor constraint(equalto view\ safearealayoutguide centerxanchor) isactive = true 45 stackview\ centeryanchor constraint(equalto view\ safearealayoutguide centeryanchor) isactive = true 46 stackview\ widthanchor constraint(equalto view\ safearealayoutguide widthanchor, multiplier 0 7) isactive = true 47 stackview\ heightanchor constraint(equaltoconstant stackviewheight) isactive = true 48 49 // adds the method that will be called when the user taps the login button 50 loginbutton addtarget(self, action #selector(handlelogin), for touchupinside) 51 52 // if the user is already logged in, we redirect them to the homecontroller 53 guard let user = user current else { return } 54 let homecontroller = homecontroller() 55 homecontroller user = user 56 57 navigationcontroller? pushviewcontroller(homecontroller, animated true) 58 } 59 60 /// called when the user taps on the loginbutton button 61 @objc private func handlelogin() { 62 guard let username = usernametextfield text, !username isempty, 63 let password = passwordtextfield text, !password isempty else { 64 // shows an alert with the appropriate title and message 65 return showmessage(title "error", message "invalid credentials ") 66 } 67 68 login(with username, password password) 69 } 70 71 /// logs in the user and presents the app's home screen (homecontroller) 72 /// parameters 73 /// username user's username 74 /// password user's password 75 private func login(with username string, password string) { 76 // todo here we will implement the login process 77 } 78 } además, la función auxiliar showmessage(title\ message ) showmessage(title\ message ) está implementada en una extensión de uiviewcontroller uiviewcontroller 1 extension uiviewcontroller { 2 3 /// presents an alert with a title, a message and a back button 4 /// parameters 5 /// title title for the alert 6 /// message shor message for the alert 7 func showmessage(title string, message string) { 8 let alertcontroller = uialertcontroller(title title, message message, preferredstyle alert) 9 10 alertcontroller addaction(uialertaction(title "back", style cancel)) 11 12 present(alertcontroller, animated true) 13 } 14 } para el proceso de cierre de sesión, insertamos un botón en el controlador de inicio, es decir, homecontroller homecontroller este controlador de vista solo contendrá el botón de cierre de sesión y una etiqueta que muestra el nombre de usuario del usuario la implementación de este controlador de vista es sencilla 1 import uikit 2 import parseswift 3 4 class homecontroller uiviewcontroller { 5 6 /// when set, it updates the usernamelabel's text with the user's username 7 var user user? { 8 didset { 9 usernamelabel text = "hello \\(user? username ?? "n/a")!" 10 } 11 } 12 13 private let usernamelabel uilabel = { 14 let label = uilabel() 15 label textalignment = center 16 label font = boldsystemfont(ofsize 18) 17 label translatesautoresizingmaskintoconstraints = false 18 return label 19 }() 20 21 private let logoutbutton uibutton = { 22 let button = uibutton(type roundedrect) 23 button settitle("log out", for normal) 24 button translatesautoresizingmaskintoconstraints = false 25 return button 26 }() 27 28 override func viewdidload() { 29 super viewdidload() 30 31 // sets up the layout (usernamelabel and logoutbutton) 32 view\ backgroundcolor = systembackground 33 navigationitem hidesbackbutton = true 34 navigationitem title = "back4app" 35 view\ addsubview(usernamelabel) 36 view\ addsubview(logoutbutton) 37 38 usernamelabel topanchor constraint(equalto view\ safearealayoutguide topanchor, constant 8) isactive = true 39 usernamelabel centerxanchor constraint(equalto view\ safearealayoutguide centerxanchor) isactive = true 40 41 logoutbutton bottomanchor constraint(equalto view\ safearealayoutguide bottomanchor, constant 8) isactive = true 42 logoutbutton centerxanchor constraint(equalto view\ safearealayoutguide centerxanchor) isactive = true 43 44 // adds the method that will be called when the user taps the logout button 45 logoutbutton addtarget(self, action #selector(handlelogout), for touchupinside) 46 } 47 48 /// called when the user taps the logout button 49 @objc private func handlelogout() { 50 // todo here we will implement the logout process 51 } 52 } 3 solicitud de inicio de sesión ahora procedemos a implementar el login(with\ password) método en la logincontroller clase el parseuser protocolo le da al user objeto el método estático login(username\ password) este método prepara y envía la solicitud de inicio de sesión a tu back4app aplicación dependiendo del caso de uso, se puede utilizar una de las muchas implementaciones del login( ) método ahora completamos el login(with\ password) método en logincontroller 1 class homecontroller uiviewcontroller { 2 3 4 /// logs in the user and presents the app's home screen (homecontroller) 5 /// parameters 6 /// username user's username 7 /// password user's password 8 private func login(with username string, password string) { 9 // warning use only one of the following implementations, the synchronous or asynchronous option 10 11 // logs in the user synchronously, it throws a parseerror error if something happened 12 // this should be executed in a background thread! 13 do { 14 let loggedinuser = try user login(username username, password password) 15 16 // after the login success we send the user to the home screen 17 let homecontroller = homecontroller() 18 homecontroller user = loggedinuser 19 20 navigationcontroller? pushviewcontroller(homecontroller, animated true) 21 } catch let error as parseerror { 22 showmessage(title "error", message "failed to log in \\(error message)") 23 } catch { 24 showmessage(title "error", message "failed to log in \\(error localizeddescription)") 25 } 26 27 // logs in the user asynchronously 28 user login(username username, password password) { \[weak self] result in // handle the result (of type result\<user, parseerror>) 29 switch result { 30 case success(let loggedinuser) 31 self? usernametextfield text = nil 32 self? passwordtextfield text = nil 33 34 // after the login success we send the user to the home screen 35 let homecontroller = homecontroller() 36 homecontroller user = loggedinuser 37 38 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 39 case failure(let error) 40 self? showmessage(title "error", message "failed to log in \\(error message)") 41 } 42 } 43 } 44 } 4 solicitud de cierre de sesión la solicitud de cierre de sesión es tan simple como la solicitud de inicio de sesión una vez más, el parseuser protocolo proporciona al user el método estático logout( ) al llamar a este método, el usuario actual (accedido a través de user current ) cierra sesión en su aplicación back4app llamaremos a este método cuando el usuario toque el botón de cierre de sesión ubicado en la pantalla de inicio, es decir, en el handlelogout() método en la homecontroller clase, añadimos lo siguiente 1 class homecontroller uiviewcontroller { 2 3 4 /// called when the user taps the logout button 5 @objc private func handlelogout() { 6 // warning use only one of the following implementations, the synchronous or asynchronous option 7 8 // logs out the user synchronously, it throws a parseerror error if something happened 9 // this should be executed in a background thread! 10 do { 11 try user logout() 12 13 // after the logout succeeded we dismiss the home screen 14 navigationcontroller? popviewcontroller(animated true) 15 } catch let error as parseerror { 16 showmessage(title "error", message "failed to log out \\(error message)") 17 } catch { 18 showmessage(title "error", message "failed to log out \\(error localizeddescription)") 19 } 20 21 // logs out the user asynchronously 22 user logout { \[weak self] result in // handle the result (of type result\<void, parseerror>) 23 switch result { 24 case success 25 // after the logout succeeded we dismiss the home screen 26 self? navigationcontroller? popviewcontroller(animated true) 27 case failure(let error) 28 self? showmessage(title "error", message "failed to log out \\(error message)") 29 } 30 } 31 } 32 } 5 ¡ejecuta la aplicación! en este repositorio https //github com/templates back4app/ios user log in and log out , encontrarás un proyecto de xcode que contiene los procesos de inicio y cierre de sesión que describimos anteriormente antes de ejecutar la aplicación, asegúrate de haber conectado el proyecto de xcode a tu back4app back4app aplicación conclusión el back4app y el parseswift sdk parseswift sdk nos permiten integrar características de inicio y cierre de sesión en aplicaciones ios de manera rápida después de conectar tu back4app aplicación con tu proyecto de xcode, el proceso de inicio (o cierre) de sesión solo requiere llamar a un único método