登录流程
核心代码逻辑在这3个类中:
UserInfo 用户信息管理类(单例)
单例初始化,将核心对象从本地取出以及核心逻辑
private override init(){
super.init()
if let loginModel = UserTokenModel.getLoginInfoModel() {
self.userLoginInfoModel = loginModel
}
if let infoModel = UserInfoModel.getInfoModel() {
self.userInfoModel = infoModel
}
}
/// 更新本地登录信息
public class func setUserInfoModel(_ userAccout:String, accessToken:String)
{
if let model = UserTokenModel.updateUserLoginInfoModel(userAccout, accessToken: accessToken)
{
shared.userLoginInfoModel = model
}
}
/// 更新本地个人信息,清空本地用户数据
......
包含:用户登录信息、用户个人信息、用户偏好设置、设备信息等等;
其中主要介绍:UserTokenModel、UserInfoModel;
UserTokenModel用于保存用户登录信息
UserInfoModel用于保存用户个人信息
LoginManage登录操作管理类 有两种方式:密码登录,生物验证登录 密码登录方式:
public class func passWordLogin(userAccout:String, password:String, fail:@escaping failCallBack) {
//密码RSA加密
let resPassWord = RSAHandler.RSAEncryptedHandler(password) ?? ""
/*
与后端交互,此处省略
*/
LocalAuthManager.userLocalAuth("开启生物验证") {(state, error) -> (Void) in
if state == .success {
UserInfo.setUserInfoModel(userAccout, accessToken: resPassWord)
loginSucess()
}else{
//生物识别虽然失败但登录依旧成功,所以不保存用户登录信息。
loginSucess()
fail(state.rawValue)
print("认证失败")
}
}
}
生物验证登录 前提:在使用此种方式之前必须有一次成功的密码登录。
public class func authLogin(fail:@escaping failCallBack) {
LocalAuthManager.userLocalAuth("生物验证") {(state, error) -> (Void) in
if state == .success {
loginSucess()
}else{
fail(state.rawValue)
print("登录失败")
}
}
}
退出流程
LogoutManage 退出操作管理类 本地数据清理,页面跳转.(代码省略)
Window.RootVC的值
//rootVC切换
let vcLogin = UIApplication.shared.keyWindow?.rootViewController
let vcRoot = RootViewController()
UIApplication.shared.keyWindow?.rootViewController = vcRoot
//手动释放登录页面
vcLogin?.dismiss(animated: false, completion: nil)
iOS-Swift 完整登录方案(touchID&faceID&keychain)一 传送门