login.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  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. import { saveToken } from "../../Lib/Request";
  15. export default {
  16. components: {},
  17. data: () => ({
  18. openid: null,
  19. phoneInfo: null,
  20. }),
  21. computed: {},
  22. methods: {
  23. login() {
  24. let that = this;
  25. //获取openid
  26. uni.login({
  27. provider: "weixin",
  28. success: function (loginRes) {
  29. console.log(`uni.login errMsg = ${loginRes.errMsg}`);
  30. if (loginRes.code) {
  31. //调用登录接口
  32. that
  33. .$request({
  34. server: 2,
  35. servant: 10005,
  36. data: {
  37. code: loginRes.code,
  38. },
  39. })
  40. .then((result) => {
  41. console.log(result);
  42. if (result.code === 0) {
  43. if (result.data.token && result.data.id) {
  44. //保存token
  45. saveToken(result.data.token, result.data.id);
  46. } else {
  47. that.openid = result.data.openid;
  48. //获取token
  49. that.getToken();
  50. }
  51. } else {
  52. uni.showToast({
  53. title: result.msg,
  54. duration: 2000,
  55. icon: "none",
  56. });
  57. }
  58. })
  59. .catch((err) => {
  60. console.log(err);
  61. });
  62. } else {
  63. uni.showToast({
  64. title: loginRes.errMsg,
  65. duration: 2000,
  66. icon: "none",
  67. });
  68. }
  69. },
  70. fail(err) {
  71. console.log(err);
  72. },
  73. });
  74. },
  75. //获取手机号码
  76. decryptPhoneNumber(e) {
  77. console.log(e.detail);
  78. if (e.detail.errMsg == "getPhoneNumber:ok") {
  79. console.log(e.detail.iv);
  80. console.log(e.detail.encryptedData);
  81. this.phoneInfo = {
  82. encryptedData: e.detail.encryptedData,
  83. iv: e.detail.iv,
  84. };
  85. //获取token
  86. this.getToken();
  87. } else {
  88. uni.showToast({
  89. title: "用户拒绝权限",
  90. duration: 2000,
  91. icon: "none",
  92. });
  93. }
  94. },
  95. //获取uuid和token
  96. getToken() {
  97. console.log(this.openid);
  98. console.log(this.phoneInfo);
  99. if (this.openid && this.phoneInfo) {
  100. console.log("getToken");
  101. const platform = uni.getSystemInfoSync().platform;
  102. let systemType;
  103. switch (platform) {
  104. case "ios":
  105. systemType = 1;
  106. break;
  107. case "android":
  108. systemType = 2;
  109. break;
  110. default:
  111. systemType = 3;
  112. break;
  113. }
  114. const openid = this.openid;
  115. const iv = this.phoneInfo.iv;
  116. const phone = this.phoneInfo.encryptedData;
  117. //清除数据避免重复调用
  118. this.openid = null;
  119. this.phoneInfo = null;
  120. this.$request({
  121. server: 2,
  122. servant: 10003,
  123. data: {
  124. type: 1,
  125. openid,
  126. phone,
  127. systemType,
  128. iv,
  129. },
  130. })
  131. .then((result) => {
  132. console.log(result);
  133. if (result.code === 0) {
  134. if (result.data.token && result.data.id) {
  135. //保存token
  136. saveToken(result.data.token, result.data.id);
  137. }else{
  138. uni.showToast({
  139. title: 'token 或者uid为空',
  140. duration: 2000,
  141. icon: "none",
  142. });
  143. }
  144. } else {
  145. uni.showToast({
  146. title: result.msg,
  147. duration: 2000,
  148. icon: "none",
  149. });
  150. }
  151. })
  152. .catch((err) => {
  153. console.log(err);
  154. });
  155. }
  156. },
  157. },
  158. watch: {},
  159. // 页面周期函数--监听页面加载
  160. onLoad() {},
  161. // 页面周期函数--监听页面初次渲染完成
  162. onReady() {},
  163. // 页面周期函数--监听页面显示(not-nvue)
  164. onShow() {},
  165. // 页面周期函数--监听页面隐藏
  166. onHide() {},
  167. // 页面周期函数--监听页面卸载
  168. onUnload() {},
  169. // 页面处理函数--监听用户下拉动作
  170. onPullDownRefresh() {
  171. uni.stopPullDownRefresh();
  172. },
  173. // 页面处理函数--监听用户上拉触底
  174. onReachBottom() {},
  175. // 页面处理函数--监听页面滚动(not-nvue)
  176. /* onPageScroll(event) {}, */
  177. // 页面处理函数--用户点击右上角分享
  178. /* onShareAppMessage(options) {}, */
  179. };
  180. </script>
  181. <style></style>