vue中uni-app實(shí)現(xiàn)小程序登錄注冊(cè)功能

    思路:

    1.使用微信的?open-type="getUserInfo" 獲取用戶信息,將用戶信息保存到userinfoDetails對(duì)象中去。愛(ài)掏網(wǎng) - it200.com

    2.使用?uni.login() 獲取code,并且把code傳給后臺(tái),后臺(tái)會(huì)返回openid

    3.使用vuex和本地緩存保存相關(guān)狀態(tài)值

    備注vuex和本地緩存的區(qū)別:

    vuex是響應(yīng)式更新,頁(yè)面不刷新數(shù)據(jù)也會(huì)實(shí)時(shí)更新,但是頁(yè)面一刷新,數(shù)據(jù)可能會(huì)失效

    本地緩存不會(huì)響應(yīng)式更新,但是一刷新本地緩存就會(huì)更新。愛(ài)掏網(wǎng) - it200.com所以二者結(jié)合使用,前端小白不知道這個(gè)做法是否科學(xué),

    我把調(diào)用登錄注冊(cè)的方法封裝到公共方法里

    代碼如下

    import store from '@/store'
    const app = {
     apiUrl: 'https://hoxxxxxxxxop.com/', //請(qǐng)求的地址
     _getuserinfo(res,ppid) {
     var that = this
     var userinfoDetails = {}
     userinfoDetails = res.detail.userInfo
     uni.getUserInfo({
      provider: 'weixin',
      success: function () {
      uni.login({
      success:function(res){
       uni.showLoading({
       title: '登陸中...',
       mask: false
       });
       uni.request({
       url: that.apiUrl + 'small/id?code=' + res.code,
       success: (res) => {
        console.log(res)
        if (res.data.openid) {
        userinfoDetails.openid = res.data.openid
        userinfoDetails = JSON.parse(JSON.stringify(userinfoDetails).replace(/avatarUrl/g, "headimgurl"));
        userinfoDetails = JSON.parse(JSON.stringify(userinfoDetails).replace(/gender/g, "sex"));
        userinfoDetails = JSON.parse(JSON.stringify(userinfoDetails).replace(/nickName/g, "nickname"));
        delete userinfoDetails.language;
        userinfoDetails.ppid = ppid || ''
        console.log(userinfoDetails)
        uni.setStorageSync('userinfoDetails',userinfoDetails)
        }
        if(res.data.status == 0) {
        that.sendInfo(userinfoDetails) // 用戶還沒(méi)注冊(cè)過(guò)需調(diào)用此方法
        console.log('我還沒(méi)有注冊(cè)')
        } else {
        uni.showToast({
         title: '登錄成功',
         icon: 'success',
         duration: 2000
        })
        store.commit('login', res.data) // vuex的方法,存openid,userinfo,和更改isloginstatus狀態(tài)值
        uni.setStorageSync('StorageloginStatus',true) // 補(bǔ)充本地存儲(chǔ) localStorage解決vuex刷新數(shù)據(jù)不保留
        uni.setStorageSync('Storageopenid',res.data.openid)
        uni.setStorageSync('Storageuserinfo',res.data.userinfo)
        }
        if (res.data.status == 0 && res.data.userinfo == 0) {
        uni.showToast({
         title: '登錄失敗',
         duration: 2000
        })
        }
       }
       })
      }
      })
      }
     });
     },
     sendInfo(userinfoDetails) {
     var that = this
     uni.request({
      url: this.apiUrl + 'sm/vip', //注冊(cè)接口
      data: userinfoDetails,
      method: 'POST',
      success: (res) => {
      if(res.data.userinfo == 1) {
       uni.hideLoading()
       uni.showToast({
       title: '注冊(cè)成功',
       icon: 'success',
       duration: 2000
       })
       store.commit('login', res.data) // vuex的方法,存openid,userinfo,和更改isloginstatus狀態(tài)值
       uni.setStorageSync('StorageloginStatus',true)
       uni.setStorageSync('Storageopenid',res.data.openid)
       uni.setStorageSync('Storageuserinfo',res.data.userinfo)
      } else {
       uni.hideLoading()
       uni.showToast({
       title: res.data.msg,
       duration: 2000
       })
      }
      }
     })
     }
    }
    export default app;

    在index.vue調(diào)用

    用Vuex中的isloginStatus和緩存中的StorageloginStatus來(lái)控制是否顯示登錄的按鈕

    
    
    import app from '../../common/config.js'
    export default {
     data() {
      return {
      ppid: "",
      StorageloginStatus: false
      }
     },
     computed: mapState({
      isloginStatus: state => state.isloginStatus,
     }),
     onLoad(option) {
      this.ppid = this.scene_decode(option.scene).ppid //封裝的scene_decode() 方法
      this.StorageloginStatus = uni.getStorageSync('StorageloginStatus')
     },
     methods: {
      // 獲取用戶信息
      getuserinfo(res) {
      app._getuserinfo(res,this.ppid) // 封裝好的方法 res是微信返回的用戶信息,ppid是二維碼攜帶的參數(shù) 
      },
      // 當(dāng)注冊(cè)或者登錄成功 顯示路由按鈕
      goreserve() {
      console.log('去掛號(hào)了')
      }
     }
     }

    vuex

    import Vue from 'vue'
    import Vuex from 'vuex'

    Vue.use(Vuex)

    const store = new Vuex.Store({
     state: {
     isloginStatus: false,
     userinfo: "", // 狀態(tài)值
     openid: "", 
     userinfoDetails: {} ,// 頭像姓名城市等。愛(ài)掏網(wǎng) - it200.com愛(ài)掏網(wǎng) - it200.com愛(ài)掏網(wǎng) - it200.com
     ppid: ""
     },
     mutations: {
     login(state,res) {
      state.isloginStatus = true,
      state.userinfo = res.userinfo, // 如果userinfo==1 --->已登錄
      state.openid = res.openid 
     },
     saveUserinfoDetails(state,res) {
      state.userinfoDetails = res
     },
     savePPid(state,id) {
      stage.ppid = id // 存ppid
     }
     },
    })
    export default store
    

    總結(jié)

    以上所述是小編給大家介紹的vue中uni-app 實(shí)現(xiàn)小程序登錄注冊(cè)功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。愛(ài)掏網(wǎng) - it200.com在此也非常感謝大家對(duì)網(wǎng)站的支持!
    如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!


    聲明:所有內(nèi)容來(lái)自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
    發(fā)表評(píng)論
    更多 網(wǎng)友評(píng)論0 條評(píng)論)
    暫無(wú)評(píng)論

    返回頂部

    主站蜘蛛池模板: 在线精品一区二区三区电影| 日本一区二区三区不卡视频| 亚洲国产精品乱码一区二区 | 国产一区二区三区日韩精品 | 精品无码中出一区二区| 免费精品一区二区三区第35| 国产一区二区三区无码免费| 国产激情一区二区三区小说 | 精品成人乱色一区二区| 国产成人一区二区三区视频免费| 国产乱子伦一区二区三区| 天堂va视频一区二区| 亚洲高清一区二区三区电影| 久久久久无码国产精品一区| 在线精品亚洲一区二区小说| 精品国产不卡一区二区三区| 国产精品一区二区三区99| 精品91一区二区三区| 国产一区二区精品久久岳√| 爆乳无码AV一区二区三区 | 精品少妇人妻AV一区二区三区 | 日本精品一区二区三区四区| 风间由美在线亚洲一区| 国产精品伦子一区二区三区| 日韩免费一区二区三区| 国产伦精品一区二区三区精品 | 成人精品一区二区三区电影| 无码国产精品久久一区免费 | 久久久91精品国产一区二区| 国产精品熟女一区二区| 性无码免费一区二区三区在线| 无码精品人妻一区二区三区人妻斩| 中文字幕色AV一区二区三区| 精品国产免费一区二区三区香蕉 | 精品无码国产一区二区三区麻豆| 中文字幕一区二区精品区| 78成人精品电影在线播放日韩精品电影一区亚洲| 无码av免费一区二区三区试看| 亚洲一区二区三区影院 | 天堂国产一区二区三区| 国产综合一区二区|