login.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <view class="login">
  3. <button
  4. type="default"
  5. open-type="getPhoneNumber"
  6. @getphonenumber="decryptPhoneNumber"
  7. @click="login"
  8. >
  9. 微信授权一键登录
  10. </button>
  11. </view>
  12. </template>
  13. <script>
  14. export default {
  15. components: {},
  16. data: () => ({
  17. openid: null,
  18. phoneInfo: null,
  19. }),
  20. computed: {},
  21. methods: {
  22. login() {
  23. let that = this;
  24. //获取openid
  25. uni.login({
  26. provider: "weixin",
  27. success: function (loginRes) {
  28. console.log(loginRes.authResult);
  29. //调用登录接口
  30. that
  31. .$request({
  32. server: 2,
  33. servant: 10005,
  34. data: {
  35. code: loginRes.code,
  36. },
  37. })
  38. .then((result) => {
  39. console.log(result);
  40. if (result.code === 0) {
  41. that.openid = result.data.openid;
  42. //获取token
  43. that.getToken();
  44. }
  45. })
  46. .catch((err) => {
  47. console.log(err);
  48. });
  49. },
  50. fail(err) {
  51. console.log(err);
  52. },
  53. });
  54. },
  55. //获取手机号码
  56. decryptPhoneNumber(e) {
  57. console.log(e.detail);
  58. if (e.detail.errMsg == "getPhoneNumber:ok") {
  59. console.log(e.detail.iv);
  60. console.log(e.detail.encryptedData);
  61. this.phoneInfo = {
  62. encryptedData: e.detail.encryptedData,
  63. iv: e.detail.iv,
  64. };
  65. //获取token
  66. this.getToken();
  67. }
  68. },
  69. //获取uuid和token
  70. getToken() {
  71. console.log(this.openid);
  72. console.log(this.phoneInfo);
  73. if (this.openid && this.phoneInfo) {
  74. console.log('getToken');
  75. const platform = uni.getSystemInfoSync().platform;
  76. let systemType;
  77. switch (platform) {
  78. case "ios":
  79. systemType = 1;
  80. break;
  81. case "android":
  82. systemType = 2;
  83. break;
  84. default:
  85. systemType = 3;
  86. break;
  87. }
  88. const openid = this.openid;
  89. const iv = this.phoneInfo.iv;
  90. const phone = this.phoneInfo.encryptedData;
  91. //清除数据避免重复调用
  92. this.openid = null;
  93. this.phoneInfo = null;
  94. this.$request({
  95. server: 2,
  96. servant: 10003,
  97. data: {
  98. type: 1,
  99. openid,
  100. phone,
  101. systemType,
  102. iv,
  103. },
  104. })
  105. .then((result) => {
  106. console.log(result);
  107. })
  108. .catch((err) => {
  109. console.log(err);
  110. });
  111. }
  112. },
  113. },
  114. watch: {},
  115. // 页面周期函数--监听页面加载
  116. onLoad() {},
  117. // 页面周期函数--监听页面初次渲染完成
  118. onReady() {},
  119. // 页面周期函数--监听页面显示(not-nvue)
  120. onShow() {},
  121. // 页面周期函数--监听页面隐藏
  122. onHide() {},
  123. // 页面周期函数--监听页面卸载
  124. onUnload() {},
  125. // 页面处理函数--监听用户下拉动作
  126. onPullDownRefresh() {
  127. uni.stopPullDownRefresh();
  128. },
  129. // 页面处理函数--监听用户上拉触底
  130. onReachBottom() {},
  131. // 页面处理函数--监听页面滚动(not-nvue)
  132. /* onPageScroll(event) {}, */
  133. // 页面处理函数--用户点击右上角分享
  134. /* onShareAppMessage(options) {}, */
  135. };
  136. </script>
  137. <style></style>