1. 背景
公司最近的项目为了保护App数据资源的安全,而又为了节省用户操作的步骤,而采用了手势密码优化验证过程。
2. 手势密码验证的逻辑
2.1、 首先先判断用户是否已经设置过手势密码
2.2、 如果已经设置过手势密码,则进入流程一
2.3、 用户没有设置手势密码,则进入流程二,进行设置手势密码
2.3、 流程三为修改手势密码
2.4、 最后为总的流程图
3. 下面为手势密码实现的代码
3.1、 iOS客户端要满足上面几种复杂的需求,需要做很多种情况下的判断
最终分为5种情况来判断:
1)当手势密码为空的时候,第一次录入手势密码
1.1)再次确定录入的手势密码,两次相同则成功录入
1.2)两次录入的密码不一致,录入失败
2)已经录入过了手势密码,输入的手势密码错误
3)已经录入过了手势密码,输入的手势密码正确
我们只需要做以上5种情况的判断,即可以完成上面流程图中的所有逻辑判断
3.2、 实例代码
首先,需要创建手势密码的类,然后实现它的代理方法
-(void)guestureLock:(DBGuestureLock *)lock didSetPassword:(NSString *)password { //NSLog(@"Password set: %@", password); if (lock.firstTimeSetupPassword == nil) { lock.firstTimeSetupPassword = password; NSLog(@"varify your password"); NSLog(@"当前的密码:%@", [DBGuestureLock getGuestureLockPassword]); self.label.text = @"请再次输入你的手势密码:"; } }
-(void)guestureLock:(DBGuestureLock *)lock didGetCorrectPswd:(NSString *)password { //NSLog(@"Password correct: %@", password); if (lock.firstTimeSetupPassword && ![lock.firstTimeSetupPassword isEqualToString:DBFirstTimeSetupPassword]) { lock.firstTimeSetupPassword = DBFirstTimeSetupPassword; NSLog(@"已经录入手势密码!"); self.label.text = @"已经录入手势密码!"; } else { NSLog(@"密码正确"); self.label.text = @"密码正确!"; } }
-(void)guestureLock:(DBGuestureLock *)lock didGetIncorrectPswd:(NSString *)password { //NSLog(@"Password incorrect: %@", password); NSLog(@"%@ %@", lock.firstTimeSetupPassword, DBFirstTimeSetupPassword); if (![lock.firstTimeSetupPassword isEqualToString:DBFirstTimeSetupPassword]) { NSLog(@"Error: 两次密码不一致!"); self.label.text = @"两次密码不一致!"; } else { NSLog(@"密码错误!"); self.label.text = @"密码错误!"; } }
完整的代码,稍后会上传上来。