成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

大齡業(yè)余程序員要搞個django小程序--08--深入理解小程序登陸狀態(tài)的維護(hù)

zsy888 / 3389人閱讀

摘要:由于微信小程序沒有一套身份驗證管理的框架,只提供等幾個,所以對于我這種初學(xué)者來說,小程序登陸狀態(tài)管理就顯得很麻煩。按照個人的理解,需要攜帶。總之,和只要其中之一不存在,都要把登陸狀態(tài)標(biāo)記為未登陸。不然用戶不清楚不確定是否登陸成功。

業(yè)余水平第一次做小程序,進(jìn)度非常慢,每天下班后也只有零碎的1到2小時,一個小問題可以難倒我?guī)讉€晚上的時間。

由于微信小程序沒有一套身份驗證管理的框架,只提供wx.loginwx.getUserProfile等幾個api,所以對于我這種初學(xué)者來說,小程序登陸狀態(tài)管理就顯得很麻煩。經(jīng)過這段時間的實踐,終于摸到了點(diǎn)門檻。先梳理幾個重要的信息。

從用戶使用的層面理解小程序的登陸邏輯

小程序打開時,只會有兩種狀態(tài)

  • 未登陸狀態(tài),查看不到個人信息
  • 登陸狀態(tài)

那,當(dāng)小程序載入時,依靠什么來判斷狀態(tài)呢?結(jié)合官方的文檔和實踐,我采用以下的邏輯判斷登陸狀態(tài)的設(shè)定:

1、sessionKey 是否過期,
2、本地是否有userInfo

經(jīng)過實踐,以上兩項,只要有一項不滿足,都必須顯性地標(biāo)識為未登陸。sessionKey都過期了,說明這個用戶很久沒登陸小程序了,有必要走一套登陸的流程,或者,本地連userInfo都沒來,即便標(biāo)識為登陸,也沒用,沒有基礎(chǔ)的用戶數(shù)據(jù)的話,你顯示個毛線。


從開發(fā)的層面理解小程序的登陸邏輯

用戶為兩種狀態(tài)

  • 已注冊
  • 未注冊

需要考慮以下情況

  • 請求中是否需要攜帶token,無token則需要驗openid,然后簽發(fā)token;token過期時通知小程序客戶端重新執(zhí)行登陸操作
  • 請求中是否需要攜帶code iv encryptedData 。按照個人的理解,需要攜帶。即wx.login(提供code)getUserInfo(提供iv和encryptedData)配合使用,可以隨時做openid校驗和解密encryptedData信息。

總結(jié)

1、小程序客戶端使用sessionKeyuserInfo緩存來決定用戶在小程序的登陸狀態(tài);
而且,都可以在全局進(jìn)行判斷,即項目根目錄的app.js

App({	wx.checkSession({      success: (res) => {//返回:有效期內(nèi)的提示},      fail: (res) => {//返回:過期的提示},      complete: (res) => {},    });        let u = wx.getStorageSync("userInfo")    console.log(u) //如果不存在,返回的是空字符    })

上面并非業(yè)務(wù)代碼,只是做簡單的展示,實踐中可以考慮使用promise封裝起來。

總之,sessionKeyuserInfo只要其中之一不存在,都要把登陸狀態(tài)標(biāo)記為未登陸。

2、需要把登陸邏輯多帶帶封裝,方便在需要的時候使用。

export const wxGetUserProfile = () => {  return new Promise((resolve, reject) => {    // 登陸中提示    wx.showLoading({      title: "登陸中...",      mask: true,    })    wx.getUserProfile({      desc: "授權(quán)以提供進(jìn)一步服務(wù)",      lang: "zh_CN",      success: (result) => {        resolve(result)      },      fail: (err) => {        reject(err)      },      complete: (res) => {        wx.hideLoading({})      },    })  })}export const wxLogin = () => {  return new Promise((resolve, reject) => {    wx.login({      success: (result) => {        resolve(result)      },      fail: (err) => {        reject(err)      },      complete: (res) => {      },    })  })}

使用Promise分別封裝wx.loginwx.getUserProfile,使用時要在使用的js中引入封裝的方法)

tapToLogin(e) {    let p1 = wxLogin()    let p2 = wxGetUserProfile()    p1.then(code => {      return code    }).then(code => {      return new Promise((resolve, reject) => {        p2.then(res => {          console.log("profile", res.userInfo);          this.setData({            userInfo: res.userInfo          })          wx.setStorageSync("userInfo", res.userInfo)          resolve({            code: code.code,            iv: res.iv,            encryptedData: res.encryptedData,            userInfo: res.userInfo          })        }).catch(err => {          reject(err)        })      })    }).then(res => {      // 使用封裝的request      if (!wx.getStorageSync("token")) {        request({            url: HOST_API.menberLogin,            method: "POST",            data: {              code: res.code,              iv: res.iv,              encryptedData: res.encryptedData            }          })          .then(result => {            wx.setStorageSync("token", result.data.context.token);            this.setData({              hasUserInfo: true,              isLogin: result.data.context.is_login,              isVip: result.data.context.is_vip,              collection: result.data.context.collection,              integration: result.data.context.integration,              views: result.data.context.views            })            console.log("無頭的返回:", result);          })      } else {        request({            url: HOST_API.menberLogin,            method: "POST"          })          .then((result) => {            console.log("有token的返回:", result);            this.setData({              hasUserInfo: true,              isLogin: result.data.context.is_login,              isVip: result.data.context.is_vip,              collection: result.data.context.collection,              integration: result.data.context.integration,              views: result.data.context.views            })          })      }    })  },

未登陸狀態(tài)

登陸狀態(tài)

當(dāng)然,在使用時還是存在邏輯上不清晰的情況。

3、設(shè)置的問題

  • isLogin bool設(shè)置為全局變量,注意這個不能設(shè)置為緩存。
  • wx.checkSessionwx.getStorageSync("userInfo") 封裝好,可以在全局調(diào)用,可以在需要的環(huán)節(jié)進(jìn)行調(diào)用,并且,必須相應(yīng)地改更全局變量isLogin的值。
  • tokenuserInfo要寫到緩存中
  • 可以寫一個登陸頁面的模板,供各個頁面調(diào)用。當(dāng)然,不寫模版似乎也沒啥問題,但必須,當(dāng)前的界面在點(diǎn)擊授權(quán)登陸后,要有顯性的提示:登陸完成云云。不然用戶不清楚、不確定是否登陸成功。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/121117.html

相關(guān)文章

  • 大齡業(yè)余程序搞個django程序--09--程序登陸狀態(tài)維護(hù)之個人中心如何做數(shù)據(jù)加載

    摘要:個人中心如何加載數(shù)據(jù)截圖中,顯性的數(shù)據(jù)有登陸我的積分瀏覽歷史我的收藏年會會員成為會員時則顯示會員到期時間以上幾個數(shù)據(jù)都是顯性的,即登陸后就要立刻顯示的。那么這個頁面數(shù)據(jù)的加載應(yīng)這樣設(shè)計。 ...

    gitmilk 評論0 收藏0
  • 30 歲安卓程序還有出路嗎,應(yīng)該怎么規(guī)劃?

    摘要:在舒伯的生涯階段里有個確立階段,歲歲。知識技術(shù)安卓程序員需要掌握編程語言應(yīng)用框架開發(fā)工具等這些具體的知識和技術(shù)。技術(shù)能力與閱歷對安卓程序員來講,知識技術(shù)是一方面,是容易習(xí)得的,是較淺的層面。 大齡程序員的界定 老早網(wǎng)上有人說,安卓開發(fā)干不過30歲,后來又有人說干不過35歲,后來又有人說干不過...

    不知名網(wǎng)友 評論0 收藏0
  • Django搭建個人博客:結(jié)束和開始

    摘要:教程看到這里,你已經(jīng)學(xué)會如下內(nèi)容搭建開發(fā)環(huán)境博文管理用戶管理發(fā)表評論若干小功能搭建簡單的小博客,以上的功能夠用了。教程為了起步平緩,沒有展開這方面的內(nèi)容。陌生人,祝你學(xué)業(yè)進(jìn)步事業(yè)有成歡迎常到杜賽的個人網(wǎng)站做客 教程看到這里,你已經(jīng)學(xué)會如下內(nèi)容: 搭建開發(fā)環(huán)境 博文管理 用戶管理 發(fā)表評論 若干小功能 搭建簡單的小博客,以上的功能夠用了。 相信你的志向不止于此。畢竟程序員面試個個造火...

    zqhxuyuan 評論0 收藏0
  • 從國企到互聯(lián)網(wǎng),一個初入職場將近一年半工作經(jīng)驗程序「得」與「失」

    摘要:寫在前面年月日,我只身一人來到北京,開始人生中的第一份工作,在一家國企從事軟件開發(fā)工作。因為現(xiàn)在晚飯都是在公司吃,如果不是刷朋友圈,我是不知道北京哪天的夕陽又刷屏了的,因此錯過了很多美麗的瞬間,也算一點(diǎn)遺憾吧。 ...

    不知名網(wǎng)友 評論0 收藏0
  • HTML5行業(yè)現(xiàn)狀與未來 - 2016年終大盤點(diǎn)

    摘要:行業(yè)現(xiàn)狀與未來年終大盤點(diǎn)大幅動蕩后,即將進(jìn)入平穩(wěn)期前端,在年及以前,一直處于一種萌芽期的狀態(tài)當(dāng)中,直至年才進(jìn)入行業(yè)的成長期。 HTML5行業(yè)現(xiàn)狀與未來 - 2016年終大盤點(diǎn) 1. 大幅動蕩后,即將進(jìn)入平穩(wěn)期 HTML5(WEB前端),在2012年及以前,一直處于一種萌芽期的狀態(tài)當(dāng)中,直至2013年才進(jìn)入行業(yè)的成長期。HTML5(WEB前端)在2013和2014年,隨著行業(yè)的推動慢慢的...

    mmy123456 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<