登录的实现步骤
1.uni.getUserProfile==> wx.getUserProfile
***在开发阶段,可能可以拿到用户的头像和昵称,但是在生产阶段,是100%拿不到的(微信的规定)
success(res){
res.rawData
res.signature
res.encryptedData
res.iv
}
***前端需要给后端传递过去这些参数
2.uni.login ==> wx.login
3.前端请求后端接口 : [微信一键登录的接口] 要知道这个用户是否在我们平台注册过
3.1 发送请求返回code码
需要把uni.login返回的code码传递后后端. 后端会给前端也返回一个code码[验证当前登录的用户是否之前注册过: 之前有没有绑定过手机]
1:注册过
跳转到绑定手机号页面,需要用户绑定手机号
2:没有注册过
跳转到注册页,需要注册( 其实就在我们平台的数据库中存入用户字段,并且拿到用户信息==>后端给前端该用户的token,前端拿到token需要存储起来,为了方便后续展示用户的相关信息 )
***后端给前端返回的code码: 200:注册过、60003:没有注册过
4.code码是:60003的情况==》去注册
4.1 调用:注册微信用户的接口
需要传递的参数来自于“uni.getUserProfile” 的success参数
4.2 如果注册成功 ==》 后端也会返回code码为200,就继续走 [5的流程]
5.code码是:200的情况
5.1要把用户的token存储起来 res.data.token
5.2判断用户是否绑定过手机号 res.data.member.mobile 是空的 去绑定
res.data.member.mobile 有手机号
直接提示登录成功==》返回到我的页面
代码
<button @click='wxLogin'>微信登录
# 登录 ---绑定手机号流程的逻辑总结
第一步:点击登录按钮获取用户的基本信息
做法 :给登录按钮绑定click点击事件。当用户点击登录按钮后,在事件处理函数中,首先调用uni.getuserprofile方法。获取微信用户的基本信息。 如果调用失败,则调uni.showtoast方法提示用户 您取消了微信小程序登录授权。 如果这个API调用成功,那么,服务器会返回用户的头像和昵称等信息。然后调用uni.Setstoragesync方法将用户信息存储到本地。
第二步: 获取到用户信息之后获取code码
做法: 调用uni.login方法,如果失败,则提示用户您取消了微信小程序登录授权。 如果这个API调用成功,那么服务器会返回一个code码,它是用户登录的凭证。
第三步 : 调用后端提供的用户登录登录接口,从而换取登录成功之后的token字符串。
做法: 调用后台提供的用户登录接口,并把code码传递过去,通过后台返回的状态码,要判断这个用户之前是否注册过? 如果这个用户之前没有注册过,那么就让用户调转到注册页面去注册. 那么,调用后端提供用户注册的接口,并把用户的信息当做参数传递过去,。如果请求失败,则提示用户注册失败。如果请求成功,后台会返回token字符串,然后将token字符串存储到本地. . 然后提示用户登录成功。 接着是判断用户是否绑定过手机号的流程
如果用户之前注册过。 那么,直接将后台返回的token字符串存储到本地。然后提示用户登录成功。 接着是判断用户是否绑定过手机号的流程
第四步: 用户登录成功之后,要判断用户是否绑定过手机号
当用户登录成功之后,通过后台返回的参数来判断用户是否绑定过手机号?如果绑定过,那就直接调用uni.switchTab方法跳转到首页。
如果没有绑定手机号,那就调用uni.showmodal弹出一个窗口,让用户勾选绑定手机号。当用户点击确定按钮后,调用uni.navigateto方法跳转到绑定手机号页面。
用户点击取消按钮,那就不绑定手机号,直接调用uni.removeStoragesync方法,清除用户登录的状态信息。
# 第五步:绑定手机号并登录流程
1.用户点击获取验证码按钮的处理
使用v~model收集用户输入的手机号。 当用户输入手机号后,点击获取验证码按钮. 需要对用户输入的手机号进行正则校验其是否合法。如果不合法,那么就给予错误提示. 然后return出去。
如果校验通过。 发送获取短信验证码的请求,并将手机号当参数传递给后台。后端会发送验证码至用户手机,然后在请求方法中,调用uni.showtoast方法,提示用户验证码发送成功。此时需要对验证码设置一个过期时间,把获取验证码按钮的disabled设置为true变为禁用状态, 使用setInterval定时器设置一个倒计时的效果,把按钮文本内容与倒计时进行拼接显示,判断这个倒计时等于0就清除定时器clearInterval(timer),解除按钮的禁用状态disabled设置为false. 按钮文本恢复为获取验证码,计时变量再设置为60秒. 用户收到验证码后进行输入 (补充:在date中定一个timer等于null 。 然后在请求方法中设置this.timer=SetInterval 。声明一个计时变量time等于60。 在SetInterval里面,判断时间剩余秒数 , 如果time=0 ,那就清除定时器clearinterval(timer)并恢复按钮的点击状态为true。 如果time不等于0,那么 time -- 。 并设设置按钮显示的文本为: 还剩下 time 秒)
如获取验证码请求失败,提示用户短信发送失败
2.用户输入手机号和验证码之后的处理
当用户输入手机号和验证码,点击登录按钮后。给登录按钮绑定点击事件,并添加事件处理函数,在事件处理函数中, 调用uni.showloading展示loading登录效果, 接着调用后台提供的登录接口,将用户输入的手机号和验证码传递给后台,如果请求成功, 调用uni.switchTab方法跳转到首页。 并调用uni.showtoast方法提示用户 绑定手机号成功。如果请求失败,则提示用户绑定手机号失败。