• uniapp 实现微信小程序手机号一键登录


    app 和 h5 手机号一键登录,参考文档:uni-app官网

    以下是uniapp 实现微信小程序手机号一键登录

    1、布局

    1. <template>
    2. <view class="mainContent">
    3. <image class="closeImg" @click="onCloseClick"
    4. src="quicklogin_close.png">image>
    5. <view class="centerLayout">
    6. <image class="logoImg" src="quicklogin_logo.png"
    7. mode="scaleToFill"/>
    8. <view class="phoneTxt">188****8888view>
    9. <view class="serviceTxt">天翼账号提供认证服务view>
    10. <button class="btnLogin" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
    11. 本机号码一键登录
    12. button>
    13. <view class="other" @click="onOtherLoginClick">其他登录方式view>
    14. view>
    15. <view class="agreementLayout">
    16. <u-checkbox-group v-model="checked" placement="column" @change="onCheckboxChange">
    17. <u-checkbox size="30rpx" activeColor="#ff1b1b" :name="true">
    18. u-checkbox>
    19. u-checkbox-group>
    20. <view class="agreementTxt">
    21. 我已阅读并同意外卖狮
    22. <text style="color: #F72124;font-weight: bold"
    23. @click="NavTo('/packageB/pages/Agreement/userAgreement')">用户协议
    24. text>
    25. <text style="color: #F72124;font-weight: bold"
    26. @click="NavTo('/packageB/pages/Agreement/concealAgreement')">隐私政策
    27. text>
    28. 并使用本机号码登录
    29. view>
    30. view>
    31. view>
    32. template>
    33. <script setup>
    34. import {Back, NavTo, SwcTo} from "@/utlis/uni_api";
    35. import {getCurrentInstance, ref} from "vue";
    36. import {wxGetPhoneNumber, wxPhoneNumberLogin} from "@/utlis/innerface/userLogin";
    37. const checked = ref("")
    38. let code = ""
    39. let {proxy} = getCurrentInstance();
    40. //微信获取手机号信息
    41. const getPhoneNumber = (datas) => {
    42. console.log(datas)//微信小程序返回的相关数据
    43. uniLogin(datas)
    44. }
    45. const uniLogin = (datas) => {
    46. uni.login({
    47. provider: 'weixin',
    48. success: res => {
    49. console.log(res)
    50. code = res.code
    51. let params = {
    52. code: code,
    53. iv: datas.detail.iv,
    54. encryptedData: datas.detail.encryptedData
    55. }
    56. //请求后台,获取手机号和code
    57. wxGetPhoneNumber(params, proxy).then(res => {
    58. userLogin(res.code,res.phoneNumber)
    59. }).catch((err) => {
    60. console.log("wxGetPhoneNumber err = ", err)
    61. })
    62. }
    63. });
    64. }
    65. //关闭
    66. const onCloseClick = () => {
    67. Back()
    68. }
    69. //一键号码登录
    70. const userLogin = (sCode,phoneNumber) => {
    71. let params = {
    72. code: sCode,
    73. phoneNumber: phoneNumber
    74. }
    75. //后台登录
    76. wxPhoneNumberLogin(params, proxy).then(res => {
    77. uni.setStorageSync('token', res.data.accessToken)
    78. uni.setStorageSync('activityShowType', true)
    79. setTimeout(() => {
    80. SwcTo('/pages/Home/home')
    81. }, 200)
    82. }).catch((err) => {
    83. console.log("wxPhoneNumberLogin err = ", err)
    84. })
    85. }
    86. //其他号码登录
    87. const onOtherLoginClick = () => {
    88. NavTo('/packageB/pages/Login/Login')
    89. }
    90. //复选框选中监听
    91. const onCheckboxChange = (e) => {
    92. console.log(e)
    93. }
    94. script>
    95. <style lang="scss">
    96. page {
    97. background-color: #F6F6F6;
    98. }
    99. style>
    100. <style scoped lang="scss">
    101. .mainContent {
    102. width: 100%;
    103. height: 100%;
    104. min-height: 100vh;
    105. display: flex;
    106. flex-direction: column;
    107. }
    108. .closeImg {
    109. width: 50rpx;
    110. height: 50rpx;
    111. margin: 80rpx 0 0 40rpx;
    112. }
    113. .centerLayout {
    114. width: 100%;
    115. display: flex;
    116. flex-direction: column;
    117. align-items: center;
    118. justify-content: center;
    119. margin-top: 200rpx;
    120. }
    121. .logoImg {
    122. width: 130rpx;
    123. height: 130rpx;
    124. border-radius: 30rpx;
    125. }
    126. .phoneTxt {
    127. font-weight: bold;
    128. font-size: 34rpx;
    129. letter-spacing: 1rpx;
    130. color: #464646;
    131. margin-top: 14rpx;
    132. }
    133. .serviceTxt {
    134. font-size: 24rpx;
    135. letter-spacing: 1rpx;
    136. color: #D5D5D5;
    137. margin-top: 5rpx;
    138. }
    139. .btnLogin {
    140. width: 75%;
    141. background-color: #FF1A1D;
    142. color: #FFFCF7;
    143. font-size: 28rpx;
    144. text-align: center;
    145. border-radius: 40rpx;
    146. padding: 5rpx 0;
    147. letter-spacing: 1rpx;
    148. margin-top: 60rpx;
    149. }
    150. .other {
    151. font-size: 28rpx;
    152. font-weight: bold;
    153. color: #787878;
    154. letter-spacing: 1rpx;
    155. margin-top: 50rpx;
    156. }
    157. .agreementLayout {
    158. position: absolute;
    159. bottom: 5%;
    160. left: 50%;
    161. transform: translateX(-50%);
    162. width: 90%;
    163. color: #767676;
    164. font-size: 26rpx;
    165. display: flex;
    166. letter-spacing: 1rpx;
    167. }
    168. .agreementTxt {
    169. padding-top: 7rpx;
    170. }
    171. style>

  • 相关阅读:
    HashMap 哈希碰撞、负载因子、插入方式、扩容倍数
    python-列表解析、字典解析、集合解析
    Webpack打包图片
    SpringBoot 如何使用 Micrometer 进行度量和监控
    UAC实现原理
    ElasticSearch(四)【高级查询】
    026-从零搭建微服务-文件服务(二)
    06-JVM-监控及调优案例
    合肥工业大学计算机网络实验二
    JSP校园导游查询系统myeclipse开发sql数据库bs框架java编程web网页结构
  • 原文地址:https://blog.csdn.net/qq_26711723/article/details/134419213