当前位置:   article > 正文

uniapp 微信小程序 前端登录流程_uniapp登录流程

uniapp登录流程

 步骤:

1. 从uniapp button 中通过 getphonenumber 获取 encryptedData、iv

2. 调用 uni.login() 获取 wx code,然后用wx code 获取session_key、unionid 等信息(老用户直接用union_id调后端登录接口即可,新用户需进行加密解密获取到用户手机号后传给后端再调登录接口)

3. 用 session_key 对 步骤1中获取到的encryptedData、iv 进行解密,本案例中解密后可从后端获取用户手机号phoneNum

4. 获取到手机号后,用 union_id和 phoneNum 进行登录

老用户无需传 phoneNum, 直接用 union_id 登录:

页面:

未勾选时弹出确认框:

  1. <!-- 登录按钮 -->
  2. <view v-if="hasLoginHis" class="login-btn" @click="handleLogin">手机号快捷登录</view>
  3. <button v-else open-type="getPhoneNumber" @getphonenumber="loginWithPhoneNum">手机号快捷登录</button>
  1. const encryptedIvData = ref(null)
  2. const confirmAgreeDia = () => { // 点击同意
  3. isAgree.value = true
  4. closeAgreePop()
  5. if (hasLoginHis.value) {
  6. handleLogin()
  7. } else { // 第一次登录的用户
  8. getInfoFromUniBtn(encryptedIvData.value)
  9. }
  10. }
  11. const cancelAgreeDia = () => { // 点击不同意
  12. isAgree.value = false
  13. closeAgreePop()
  14. }

@getphonenumber :

  1. const loginWithPhoneNum = (e) => { // 底部拉起微信用户手机号授权弹窗
  2. if (!isAgree.value) {
  3. encryptedIvData.value = e // 赋值给encryptedIvData
  4. openAgreePop()
  5. return
  6. }
  7. getInfoFromUniBtn(e)
  8. }
  9. const getInfoFromUniBtn = (e) => { // 从button获取到 encryptedData iv
  10. if (e.detail.errMsg === 'getPhoneNumber:ok') { // 用户授权手机号
  11. const encryptedData = e.detail.encryptedData
  12. const iv = e.detail.iv
  13. handleLogin(encryptedData, iv) // 登录
  14. } else {
  15. uni.showToast({
  16. title: '未授权手机号将无法登录', icon: 'none'
  17. })
  18. }
  19. }

登录:

  1. function handleLogin(encryptedData, iv) {
  2. if (!isAgree.value) {
  3. openAgreePop()
  4. return
  5. }
  6. uni.login({ // 获取code
  7. provider: 'weixin',
  8. success: function (res) {
  9. api.getSessionKeyByWxCode({ // 获取sessionKey,unionid
  10. code: res.code
  11. }).then(res => {
  12. let { code, message, data } = res;
  13. let sessionKey = data.session_key
  14. let unionid = data.unionid
  15. if (code === "200") {
  16. if (data.isNewUser){ // 新用户
  17. api.getIvEncryptedData({ // 获取解密信息
  18. sessionKey,
  19. encryptedData,
  20. iv
  21. }).then(res => { // 拿到用户手机号
  22. let { code, message, data } = res;
  23. if (code === "200") {
  24. let phoneNum = data.phoneNum
  25. // 调起 login 登录接口
  26. let res = await login({ unionid, phoneNum })
  27. } else {
  28. uni.showToast({ title: message, icon: "none" });
  29. }
  30. })
  31. } else { // 老用户
  32. // 调起 login 登录接口
  33. let res = await login({ unionid })
  34. }
  35. } else {
  36. uni.showToast({ title: message, icon: "none" });
  37. }
  38. })
  39. }
  40. })
  41. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/944643
推荐阅读
相关标签
  

闽ICP备14008679号