iOS
...
Users
Вход и выход пользователя с ParseSwift SDK в iOS
10 мин
вход и выход пользователя введение в руководстве по регистрации пользователей https //www back4app com/docs/ios/parse swift sdk/users/user registration мы узнали, как интегрировать опцию регистрации в ios приложение с использованием платформы back4app и parseswift sdk parseswift sdk как только пользователь успешно зарегистрируется в вашем приложении, действия входа и выхода являются ключевыми функциями в потоке приложения parseswift sdk parseswift sdk позволит нам бесшовно интегрировать эти функции в любое ios приложение предварительные требования чтобы завершить этот быстрый старт, вам нужно xcode приложение, созданное на back4app следуйте руководству по созданию нового parse приложения чтобы узнать, как создать приложение parse на back4app примечание следуйте руководству по установке parse sdk (swift) чтобы создать проект xcode, связанный с back4app цель реализовать функцию входа и выхода пользователя с использованием parseswift sdk и платформы back4app 1 настройка функций входа и выхода перед тем как начать реализовывать любую функциональность входа, мы должны создать объект, который будет представлять пользователя для простоты мы повторно используем ту же пользователь пользователь структуру (которая соответствует протоколу parseuser parseuser ), которую мы представили в руководстве по регистрации пользователей 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? } мы рекомендуем следовать руководству по регистрации пользователей и зарегистрировать как минимум одного пользователя, чтобы использовать его в качестве примера для этого руководства аналогично процессу регистрации, вход в систему требует форму, где пользователь вводит свой имя пользователя и пароль затем мы выполняем запрос на вход, используя соответствующие методы, предоставленные parseswift sdk parseswift sdk в свою очередь, back4app обрабатывает запрос и возвращает ответ, содержащий информацию для входа когда происходит ошибка, ответ возвращает информацию для идентификации и обработки этой ошибки процесс выхода из системы прост parseswift sdk parseswift sdk позволяет нам реализовать его в одной строке кода 2 настройка приложения после того как вы подключили https //www back4app com/docs/ios/parse swift sdk/install sdk ваш проект xcode к вашему back4app приложению, следующим шагом будет настройка пользовательского интерфейса приложения для процесса входа мы реализуем простой контроллер, содержащий соответствующие поля ввода и кнопку входа класс, отвечающий за эту форму, называется logincontroller и является подклассом uiviewcontroller ключевыми компонентами, которые необходимо интегрировать в этот контроллер, являются два uitextfield и одна uibutton следующий фрагмент показывает реализацию класса 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 } кроме того, вспомогательная функция showmessage(title\ message ) showmessage(title\ message ) реализована в расширении 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 } для процесса выхода мы вставляем кнопку в контроллере главного экрана, т е , homecontroller homecontroller этот контроллер представления будет содержать только кнопку выхода и метку, показывающую имя пользователя реализация этого контроллера представления проста 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 запрос на вход теперь мы переходим к реализации метода login(with\ password) в классе logincontroller протокол parseuser предоставляет объекту user статический метод login(username\ password) этот метод подготавливает и отправляет запрос на вход в ваше приложение back4app в зависимости от случая использования можно использовать одну из многих реализаций метода login( ) теперь мы завершаем метод login(with\ password) в 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 запрос на выход запрос на выход так же прост, как и запрос на вход еще раз, протокол parseuser предоставляет user статический метод logout( ) вызывая этот метод, текущий пользователь (доступный через user current ) выходит из вашего back4app приложения мы вызовем этот метод, когда пользователь нажмет кнопку выхода, расположенную на главном экране, т е в методе handlelogout() класса homecontroller , мы добавим следующее 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 запустите приложение! в этом репозитории https //github com/templates back4app/ios user log in and log out , вы найдете проект xcode, содержащий процессы входа и выхода, которые мы описали выше перед запуском приложения убедитесь, что вы подключили проект xcode к вашему back4app back4app приложению заключение с помощью back4app и parseswift sdk parseswift sdk мы можем быстро интегрировать функции входа и выхода в ios приложениях после подключения вашего back4app приложения к вашему проекту xcode процесс входа (или выхода) требует всего лишь вызова одного метода