午夜91福利视频,午夜成人在线观看,午夜在线视频免费观看,午夜福利短视频,精品午夜成人免费视频APP

小程序模板網

小程序登錄的最優流程

發布時(shi)間:2020-05-22 10:20 所屬欄目:小程序開發教程

18年中旬做過(guo)一個(ge)(ge)小程序(xu),當時是通過(guo)轉跳到一個(ge)(ge)登錄頁,然后點擊調用(yong) wx.getUserInfo ,然后發現這個(ge)(ge)api被禁用(yong)了(雖然依(yi)然可以用(yong)),然后用(yong)

<!-- 需要使用 button 來授權登錄 -->
<button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授權登錄</button>
<view wx:else>請升級微信版本</view>
復制代碼

因為當時剛好需要用戶信(xin)(xin)息(xi)(xi),然(ran)后(hou)這(zhe)個api有一個 encryptedData 屬性可以獲取信(xin)(xin)息(xi)(xi)。

這樣(yang)的流程本就可以了(le),但(dan)是意外出現了(le)。

思維的禁錮

當第(di)二次(ci)(2020年(nian))需要開發一個新的(de)(de)小程序,于是(shi)也用(yong)了(le)老代碼, 但是(shi)出現了(le)個奇怪(guai)的(de)(de)問(wen)題(ti)(ti)。 有興趣的(de)(de)可以看下面的(de)(de)[奇怪(guai)的(de)(de)問(wen)題(ti)(ti)]

奇怪的問題:

因為微信限制(zhi)無法轉跳到(dao)登錄頁(ye),所以想(xiang)是(shi)否應該在首頁(ye)設置一個(ge)彈窗,點擊(ji)的時候(hou)授(shou)權。

但是(shi)因為考慮到可能會被微信拒絕,故在小程序開發(fa)者論壇(tan)開了一篇文章

app無法轉跳到登錄頁面 and 小程序登錄的哲(zhe)學思考(kao)

隨后發現,登錄(lu)其(qi)實并不需要(yao)(yao)授(shou)權彈窗(chuang)or頁面。(如果服(fu)務器不需要(yao)(yao)保存(cun)用戶信息)

流程

下面這個圖是小程序官方(fang)圖 點(dian)我(wo)轉(zhuan)跳

代碼

app.js(小程(cheng)序(xu)的(de)入口文(wen)件)的(de)完整代碼

const loginDataKey = 'loginData'

//app.js
App({
  onLaunch: function () {

    const loginData = wx.getStorageSync(loginDataKey)
    console.log('--loginData--')
    console.log(loginData)
    let toLogin = () => {
      console.log('未登錄,去登錄..')
      wx.showLoading({title: '登錄中', icon: 'loading', mask: true})
      wx.login({
        success(res){
          console.log('wx.login res')
          console.log(res)
          let success = () => {
            console.log('登錄成功')
            let loginResponse = {"openid":"ooZAbwpdDdaZV_xiamianshi_mashaike"}
            wx.setStorageSync(loginDataKey, loginResponse)
            wx.hideLoading()
          }
          let fail = () => {
            wx.hideLoading()
            wx.showToast({
              title: '登錄失敗,請重新打開小程序試試',
              icon: 'none',
              duration: 1e8
            })
          }
          // TODO 發起網絡請求
          // 延時模擬請求登錄成功
          setTimeout(success, 500)
        },
        fail(err){
          console.log(err)
          wx.hideLoading()
          wx.showToast({
            title: '登錄失敗,請重新打開小程序試試',
            icon: 'none',
            duration: 1e8
          })
        }
      })
    }
    // 未登錄,去登錄
    if(!loginData){
      toLogin()
    // 已登錄,但是微信session_key過期
    }else{
      wx.checkSession({
        success () {
          //session_key 未過期,并且在本生命周期一直有效
          console.log('session_key 未過期')
        },
        fail () {
          // session_key 已經失效,需要重新執行登錄流程
          console.log('session_key 已經失效,需要重新執行登錄流程, 重新登錄中')
          toLogin()
        }
      })
    }

  },
  globalData: {
    userInfo: null
  }
})
復制代碼

流程如下

  • 根據本地儲存判斷是否登錄
  • 已登錄判斷是否失效
  • 失效或者未登錄去登錄
  • 登錄展示toast
  • 拿到信息存儲 關閉toast

核心

  • wx.login拿到code
  • 然后把code通過 auth.code2Session 獲取openid和unionid等。

這(zhe)是我通過(guo) auth.code2Session 拿到(dao)openid的截(jie)圖(tu)(因為(wei)這(zhe)個是測試號,所以(yi)沒有(you)unionid)

【unionid】是拿來和其他平臺打通賬號的關鍵,如(ru)果只有一個小程序,都可(ke)以不需要(yao)這(zhe)個。

效果

 

 

其他

純展示用戶頭像昵稱等

<open-data type="userAvatarUrl"></open-data>
<open-data type="userNickName"></open-data>
復制代碼

查看open-data文檔

--完(wan)--



易優小(xiao)程序(企業版)+靈活api+前后代碼開源 碼云倉(cang)庫:
本文地址://www.jinyoudianli.com/wxmini/doc/course/25267.html 復制鏈接 如(ru)需(xu)定制請聯系易優客服咨(zi)詢:

工作日 8:30-12:00 14:30-18:00
周六及部分(fen)節假日提供(gong)值班服(fu)務

易小優
轉(zhuan)人(ren)工 ×