一、相关背景
移动终端上的APP登录一般有账号登录、人脸识别登录、指纹登录等方式,其中账号登录是传统的通行做法,但要输入内容较多,在移动终端上会稍显麻烦;人脸识别不需要额外输入,而且显得高大上,但需要调用服务提供商的接口,这些接口一般都是要收费的;指纹登录则是利用移动设备本身的指纹识别功能,具备前两者的优点,缺点就是手指蜕皮人员不太好用。
综合以上,建议采用账号登录、指纹登录两种方式,本文介绍指纹登录的技术实现方式。
二、实现方式
1、开发环境
Nodejs + Vue + cordova
2、安装插件
在cordova目录内执行如下命令安装指纹识别插件:
cordova plugin add cordova-plugin-android-fingerprint-auth
3、使用插件
在各个VUE页面中就可以直接调用插件提供的FingerprintAuth.isAvailable、FingerprintAuth.encrypt等方法实现业务功能。
三、功能设计
1、注册指纹
1.1、获取登录信息
从数据库获取登录账号(用户序号clientId、用户名username、登录密码password)
1.2、获取指纹凭证
在成功调用FingerprintAuth.isAvailable后,通过FingerprintAuth.encrypt获取指纹登录凭证token
2、指纹登录
2.1、可用性检测
检测是否有指纹注册,如果没有则不能适用该登录方式
2.2、通过指纹获取登录密码
在成功调用FingerprintAuth.isAvailable后,依据用户序号clientId、用户名username、指纹登录凭证token通过FingerprintAuth.decrypt获取登录密码
2.3、比较密码是否一致
该密码如果和登录密码password一致,则成功登录
四、几个注意点
1、权限
执行FingerprintAuth.isAvailable时,出现“FINGERPRINT_PERMISSION_DENIED”错误。
需要开放USE_FINGERPRINT权限,常量USE_FINGERPRINT在API级别28中已弃用;因此也可以尝试开通USE_BIOMETRIC权限。具体开通方法参见//www.greatytc.com/p/40f9e8fe0df2。
2、登录信息保存
用户序号clientId、用户名username、登录密码password、指纹登录凭证token四个信息需要保存在本地,一般可以采用localStorage保存即可。
3、指纹窗口个性化
指纹注册、指纹登录的时候,在指纹采集后都会弹出一个指纹识别结果的窗口,该对话框窗口的标题区dialogTitle和提示文字dialogMessage均可以自行重新指定,另外为了方便阅读窗口,一般将该窗口的语言设置为中文locale: 'zh_CN'。
4、其余几个方法
除了isAvailable、encrypt、decrypt三个必须用到的方法外,还有delete、dismiss两个方法。这五个方法的作用分别如下:
4.1、isAvailable,检测指纹识别功能是否可用。
4.2、encrypt,加密账户信息并保存到默认位置,同时返回指纹识别凭证token(这个token类似账户信息加密的证书,后续就用这个证书来解密,即“账户信息+指纹=token”)。
4.3、decrypt,通过指纹识别凭证token解密获取到账户中的登录密码。
4.4、delete,删除默认位置保存的账户信息。
4.5、dismiss,关闭指纹识别的对话窗口。
五、相关组件
1、cordova-plugin-android-fingerprint-auth
网址:https://www.npmjs.com/package/cordova-plugin-android-fingerprint-auth
https://github.com/mjwheatley/cordova-plugin-android-fingerprint-auth
笔者目前用的就是这个组件,这个组件的缺点就是只支持android,如果是IOS,则需要另外的指纹识别组件。
2、cordova-plugin-fingerprint-aio
网址:https://github.com/NiklasMerz/cordova-plugin-fingerprint-aio
这个组件的优点是同时支持android、IOS,但需要cordova-android9.0及以上版本支持。笔者的cordova-android是8.1.0版本,所以只能放弃。
六、总结
移动终端上的APP通过以上组件增加指纹登录方式,实现起来非常简单,代码量也很少,建议正在开发APP的朋友,可以考虑增加这种登录方式。