微信小程序登录注册逻辑

前言:
        因为项目也需要在微信小程序平台发布,而且后面登录注册逻辑的调整花了很多时间,做一个记录防止再踩坑。
        在注册时,希望可以拿到用户的手机号码、姓名及身份证号信息,为校验是本人需要调用微信的人脸识别。

1、获取手机号码
        可以通过微信”getPhoneNumber”来获取,文档路径

2、获取用户姓名、身份证号码
        微信没有接口提供这方面的内容,项目的设计是用户自己输入。对于输入的身份证号需要添加合法校验,用户输错身份证号是很常见的事情。

3、校验输入的证件信息是本人的信息
        校验的方式是通过微信小程序的人脸识别,对应的api是”wx.startFacialRecognitionVerify”,在使用该api之前,需要检查当前设备是否支持人脸识别,检查对应的api是”wx.checkIsSupportFacialRecognition”,api文档路径
        “wx.checkIsSupportFacialRecognition”传递用户姓名和身份证有两种方式,使用传递”userIdKey”的方式会得到后台api返回的用户信息,最好不要使用传”userIdKey”的方式校验输入用户信息,不然会出现校验的时候校验页面显示的是李四的名字,但输入的用户姓名是张三。

登录逻辑:
        使用”wx.login”获取一个code,将这个code通过后端接口”verifyingUserStatus”传给后端,后端再将用户的状态返回,用户状态为未登录,跳转获取手机号码页面;用户状态为信息未绑定进入输入身份证信息页面;正常状态进入小程序首页。”wx.login”文档路径

请求用户状态限制:
        对于大部分接口都需要用户是登录状态,与后端协商好,某些请求的状态码statusCodes是用户状态有问题,在这些状态码下将跳转到获取手机号码的页面或用户信息绑定页面,因为将“verifyingUserStatus”放在这个页面的onLoad调用,属于登录过期的用户,会先进入获取手机号码的页面,过一会儿就进入小程序首页,产品觉得这种体验不好,既然可以自动登录,就不要让用户看到获取手机号码的页面,不然用户还会以为自己需要去绑定手机号码。
        后面将用户状态判断抽离成一个方法checkUser,方法里面含有“verifyingUserStatus”请求的调用,当请求状态码返回的是statusCodes时,调用这个方法判断是否需要进入获取手机号码页面或用户信息绑定。由于请求返回的状态码是统一处理,“verifyingUserStatus”也有返回statusCodes的情况,导致一直请求“verifyingUserStatus”这个接口。解决方式是将请求状态码的逻辑判断排除“verifyingUserStatus”接口请求。
        CheckUser方法里面有跳转到获取手机号页面或绑定用户信息界面,而在这两个页面我也会调用这个方法,由于我没有做当前页判断就导致了一直在跳转这两个页面的情况。使用”getCurrentPages”可以获取当前页面栈,其是一个数组,最后一个元素就是当前页面。通过判断元素的route是否等于要跳转的页面路径来控制页面跳转。getCurrentPages文档路径
        在人脸核验成功后,要进入小程序的首页。由于获取手机号页面和用户信息绑定页面都是在首页的接口状态码为statusCodes后跳转进来的,就使用”wx.navigateBack“做页面回退,使用” wx.navigateTo“跳转的话,用户滑动回退可能会再次进入获取手机号页面和用户信息绑定页面。按道理说使用” wx.redirectTo”就比较合适了,但是由于首页是tabbar页面,而该api不需要跳转到tabbar页面。之前设置”wx.navigateBack“中的”delta”是一个具体的值,后面使用CheckUser后就不适用了,因为不同情况进入获取手机号页面和用户信息绑定页面到首页的页面栈长度不一样,有的页面就不能跳转会首页了。navigateBack文档路径redirectTo文档路径navigateTo文档路径
        对于这种情况,我先用”getCurrentPages”获取页面栈,遍历页面栈数组,判断子元素的路径是否是首页,从而得到当前页到首页的相隔数,将”wx.navigateBack“中的”delta”的值设置为得到的相隔数。测试这个方法的时候发现,由于首页是tabbar页面,当是首页的其他模块(路径与首页不一致)时,使用”getCurrentPages”获取页面栈时,会有首页的路径不存入页面栈的情况,就导致当前页与首页的相隔数为0,页面不会跳转到首页。后面将”wx.navigateBack“中的”delta”的值改为判断相隔数是否为0,否”delta”的值为相隔数,是”delta”的值为页面栈数组的长度。
        后来发现跳转到为tabbar页面的首页不用那么麻烦,直接调用”wx.switchTab”就可以了。switchTab文档路径

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容