三年中文在线观看免费大全_三年大片免费高清哔哩哔哩_三年在线观看免费大全哔哩_三年大全免费大片三年大片_三年在线观看免费大全_三年大片观看免费大全哔哩哔哩_三年中文在线观看免费高清第4版_三年中文免费视频大全_三年大片大全免费观看大全_三年大片在线观看哔哩哔哩_三年在线观看中文免费观看_三年成都中文在线观看免费版

小(xiǎo)程序登陸設計(jì)-耐心看(kàn),講的(de)很(h‌"‌βěn)明(míng)白(bái) - 新聞資訊 - 雲南(nán)小(xiǎo$&)程序開(kāi)發|雲南(nán)軟件(jiàn)開(kā✘ ★✘i)發|雲南(nán)網站(zhàn)建設-雲南維串信息科技有限公司€"Ω

159-8711-8523

雲南(nán)網建設/小(xiǎo)程序開(kāi)發β®γ/軟件(jiàn)開(kāi)發

知(zhī)識

不(bù)管是(shì)網站(zhàn),軟件(jiàn)還(hái)是(shì)小​σ(xiǎo)程序,都(dōu)要(yào)直接或間(jiα♦÷ān)接能(néng)為(wèi)您産生(shēng)價值,我們在追求其視(shì)覺表現(xi​₹✘≥àn)的(de)同時(shí),更側重于功能(néng)的(‌∑de)便捷,營銷的(de)便利,運營的(de)高(gāπαo)效,讓網站(zhàn)成為(wèi)營銷工(gōng)具,讓軟件♦↔(jiàn)能(néng)切實提升企業(yè)內(nèi)部₽‌‌¶管理(lǐ)水(shuǐ)平和(hé)效率。優秀的(de)程序為(wèi)後期升級提供便捷的(π'de)支持!

小(xiǎo)程序登陸設計(jì)-耐心看(kàn),講的(de)很(hěn)明(míng)&€‍白(bái)

發表時(shí)間(jiān):2021-4-13

發布人(rén):葵宇科(kē)技(jì)

浏覽次數(shù):180

 

小(xiǎo)程序可(kě)以通(tōng)過微(wēi)信官方提供的(de)登錄能(n↑®♣≤éng)力方便地(dì)獲取微(wēi)信提供的(de)用↓→(yòng)戶身(shēn)份标識,快(kuài)速建立πγ©小(xiǎo)程序內(nèi)的(de)用(yòng)戶體(tǐ)系。

即「靜(jìng)默登錄」,通(tōng)過調用(yò✘γng) wx.login 獲取到(dào) code ,将其發送到(dào)開(kāi)發者後端,開(kāi)發者後端通(tΩ∑¶↕ōng)過接口去(qù)微(wēi)信後端換取到(dào)&nbs↔'₩p;openid 和(hé) sessionKey(現(xiàn)在會(huì)将 unionid 也(yě)一(yī)并返回)後,然後把自γ✔(zì)定義登錄态 3rd_session(本業(yè)務命名為(wèi)auth-token) 返回給前端,就(jiù)已經完成登錄行(xíng)為(wèi)了(le)λ≈π¥。

理(lǐ)論上(shàng),開(kāi)發者後端可(kě)以通(‍↔∞tōng)過 openid識别用(yòng)戶,也(yě)能(néng)通(tōng)過unionid關聯同主體(tǐ)的(de)多(duō)個(gè)小(xiǎo)程序、公衆号、app,實現€♣₩♥(xiàn)數(shù)據互通(tōng),從(cóng)而為(wèi)每一(yī≤↑)個(gè)用(yòng)戶創建獨一(yī)無二的(d∏λ÷e)uid(本業(yè)務自(zì)定義的(de)用(yòng)戶 id),在「微≠↔(wēi)信生(shēng)态」中建立成熟用(yòng)戶"γ體(tǐ)系。

然而,對(duì)于複雜(zá)的(de)電(diàn)商跨↕↕>✘端應用(yòng),比如(rú)pch5小(xiǎo)程序,不(bù)同渠道(dào)注冊的(de)uid是(shì)不(bù)同的(de),用(yòng)戶登錄後難以對(duì)各個(gè)渠道(dào)的(de)交易、促銷、收藏等數(shù)據進行(xíng‌")整合。因此,要(yào)實現(xiàn)跨端的(de)用(yòng)戶體(tǐ)系數(shù)¶×π據互通(tōng),就(jiù)需要(yào)提供一(yī)個(gè)唯一(yī)的(de↓÷‍ )用(yòng)戶标識——手機(jī)号。這(zhè)便是(shì)本文(wén)重點講述的(de)「用(yòngσ♣)戶登錄」,即「遊客态」轉變成「會(huì)員(yu≈γ♥án)态」的(de)過程。

2. 「用(yòng)戶登錄」流程

當新用(yòng)戶第一(yī)次進入小(xiǎo)程序時(shí),便會(hu¶•ì)觸發「靜(jìng)默登錄」,這(zhè)個(gè)↕©♣£過程對(duì)用(yòng)戶是(shì)無感知(zhī)的(de)。但(dàn)此時(shí)開(kāi)發者服務端已經為(wè"™i)該用(yòng)戶定義了(le)uid,并下(xià)發auth-token給小(xiǎo)程序端,對(duì)于一(yī)些(xiē)需要(yào)鑒權的(deα )請(qǐng)求,服務端可(kě)以根據請(qǐng)求‌←攜帶的(de)auth-token精确識别是(shì)哪個(gè)用(yòng)戶發起的(de)行(xíng)為(wèi)。

然而,類似加購(gòu)下(xià)單領券等用(yòng)戶行(xíng)為(wèi),涉及到(dào)跨端數≥≠£(shù)據的(de)整合,在執行(xíng)用(yòn$γδ₽g)戶操作(zuò)之前,會(huì)判斷用(yòng)戶是(shì♣<§)否登錄,如(rú)若用(yòng)戶未登錄,則跳(tiào)轉登錄←♠&頁面,整個(gè)流程如(rú)下(xià)所示:

比如(rú)在「用(yòng)戶中心」頁面點擊「我的(d<≥•≤e)訂單」,由于此時(shí)用(yòng)戶未登錄,跳(tiào)轉到(dào)登錄頁面,可≤$(kě)以選擇以下(xià)兩種登錄方式:

  1. 選擇 「微(wēi)信授權登錄」,彈出授權手機(jī)号信息彈窗(chuāng),點擊「允許」,此時(shΩ←í)用(yòng)戶登錄成功。
  2. 選擇 「手機(jī)快(kuài)捷登錄」,輸入手機(jī)号,使用(yòng) 「驗證碼」 或者 「密碼」 進行(xíng)登錄,登錄成功跳(tiào)轉回到(dào)「用(yòng)戶中Ω♦φ心」頁面。

上(shàng)述步驟已經完成了(le)「用(yòng)戶登錄」,用(yòng)戶可(kě)以正±↑常的(de)執行(xíng)加購(gòu)、領券、下(xià)單等操∑λΩ作(zuò)。 為(wèi)了(le)提升用(yòng)戶體(tǐ)驗,需要(yào)對(duì)&nbs₽$p;「會(huì)員(yuán)信息」 進行(xíng)維護 ,比如(rú)昵稱、頭♦÷¶像、性别、生(shēng)日(rì)等信息,最簡單的(de)方法是(s★♥₽↓hì) 獲取「微(wēi)信授權用(yòng)戶信息」。觸發時(shí)機(jī)分(fēn)為(wèi)以下(xià)兩種:

  1. 用(yòng)戶第一(yī)次選擇 「微(wēi)信授權登錄」 成功後跳(tiào)轉授權用(yòng)戶信息頁面,點擊&n₹>bsp;「授權用(yòng)戶信息」,彈出授權用(yòng)戶信息彈窗(chuāng)。"↑σ‌點擊「允許」,跳(tiào)轉回「用(yòng)戶中心」頁面。
  2. 在「用(yòng)戶中心」頁面點擊頭像昵稱區(qū)域,彈出π ★授權用(yòng)戶信息彈窗(chuāng),點擊「允許」,更新「會₽‌'¶(huì)員(yuán)信息」并跳(tiào)轉用(yòng)戶信息編輯頁面♠★ε。

3. 「用(yòng)戶登錄」方案設計(jì)

3.1 架構

「用(yòng)戶登錄」方案架構如(rú)上(shàng)圖所示,将所有(yǒu)™•→÷登錄相(xiàng)關功能(néng)抽象到(dào) 「service 層」(本項目将其命名為(wèi)session),供 「業(yè)務層」 調用(yòng)。該 「service 層」 主要(yào)分(fēn)為(wèi)以下(xià♦≠)兩個(gè)模塊:

3.1.1 libs - 提供登錄相(xiàng)關的(de)類方法 ≤供「業(yè)務層」調用(yòng)

  1. 封裝session類,提供類方法供「業(yè)務層」調用(yòng)。主要(↔‌&•yào)有(yǒu)以下(xià)幾種方法:
方法名功能(néng)使用(yòng)場(chǎng)景
silentLogin發起靜(jìng)默登錄-
login登錄,silentLogin方法的(de)一(yī)層封裝用(yòng)于小(xiǎo)程序啓動時(shí)發起靜(jìng)默登錄
refreshLogin刷新登錄态,silentLogin方法的(de)一(yī)層封裝用(yòng)于登錄态過期時(shí)發起靜(jìng)默登錄
ensureSessionKey驗證sessionKey是(shì)否過期,過期則刷新登錄态綁定微(wēi)信授權手機(jī)号時(shí)驗證是(₽σ±shì)否過期,過期則得(de)重新彈窗(chuāng)授λ♦權
bindPhone綁定微(wēi)信授權手機(jī)号微(wēi)信授權手機(jī)号彈窗(chuāng)點擊「允許」觸發
updateUser綁定微(wēi)信授權用(yòng)戶信息微(wēi)信授權用(yòng)戶信息點擊「允許」觸發
getCurrentAuthStep獲取當前用(yòng)戶登錄所屬階段詳見(jiàn)下(xià)文(wén)
mustAuth各種觸發場(chǎng)景攔截判斷是(shì)否需要(yào)登錄詳見(jiàn)下(xià)文(wén)

當然,session類中還(hái)封裝了(le)一(yī)些(xiē)方法用(yòng)于與storage交互,比如(rú)獲取storage中的(de)auth-token用(yòng)于各種鑒權請(qǐng)求攜帶等等。session類也(yě)提供的(de)一(yī)些(xiē)拓展方法,比如(rú)注銷賬号、解綁手機(jī)±>号等等用(yòng)于後續需求叠代。

  1. 裝飾器(qì):

    • must-auth: mustAuth類方法的(de)裝飾器(qì),便于業(yè)務層各種場(γ₽§chǎng)景觸發登錄。
    • fuse-line: 熔斷機(jī)制(zhì),如(rú)果短(duǎn)時(shí)間(jiān)內(nèi)多(duō∞≈"✔)次調用(yòng),則停止響應一(yī)段時(shí)間(jiān)​±,類似于 TCP 慢(màn)啓動。用(yòng)于解決refreshLoginlogin等方法的(de)并發處理(lǐ)問(wèn)題。
    • single-queue: 單隊列模式,同一(yī)時(shí)間(jiān),隻允許一(yī)個(gè)正在過程中的​< ¶(de)網絡請(qǐng)求。請(qǐng)求被鎖定之後,同樣的(de)請(qǐng)求都(dō‍≈$u)會(huì)被推入隊列,等待進行(xíng)中的(d¶★☆e)請(qǐng)求返回後,消費(fèi)同一(yī)個(gè)結果。用(yòng)于解決refreshLoginlogin等方法的(de)并發處理(lǐ)問(wèn)題。

3.1.2 ui - 提供通(tōng)用(yòng)組件(✘εjiàn)供業(yè)務層調用(yòng)

  1. 基礎組件(jiàn): user-container和(hé)phone-container分(fēn)别是(shì)獲取「微(wēi)信授權用(yòng)戶信息」和(hé)獲取「微(w♠¥ēi)信授權手機(jī)号」的(de)純 UI 單元組件(jiàn$®),給通(tōng)用(yòng)組件(jiàn)使用(yòng)。
  2. behavior 類:拿(ná)到(dào)授權數(shù)據後需要(yào)發送給服©γ務端進行(xíng)存儲,也(yě)需要(yào)執行(xíng)一(yī)些 δ₹(xiē)跳(tiào)轉邏輯判斷,這(zhè)些(xiē)都(dōu)抽象成行(xíδ ♦¶ng)為(wèi)類封裝在auth-flow中,供通(tōng)用(yòng)組件(jiàn)使用(yòng)☆γ₽。
  3. 通(tōng)用(yòng)組件(jiàn): 共用(yòng)一(yī)個(gè)行(xíng)為(wèi)類,區(qū)别>£在于auth-flow-container用(yòng)于頁面,auth-flow-popup用(yòng)于彈窗(chuāng)。如(rú)下(xià☆λ<β)所示,小(xiǎo)程序隻有(yǒu)微(wēi)信授權功能(σ$ néng),則可(kě)以通(tōng)過彈窗(chuāng)完成授權。如(rú)小(xiǎ'♣o)程序同時(shí)提供手機(jī)号驗證碼和(hé)密碼♦&登錄等功能(néng),則需跳(tiào)轉特定登錄頁面。

3.2 libs

3.2.1 用(yòng)戶身(shēn)份定義

綜上(shàng)所示,用(yòng)戶登錄的(de)階段可(kě)以分(fēβ✘≥n)為(wèi)以下(xià)三步:

// 用(yòng)戶登錄的(de)階段 export enum AuthStepType {   // 階段一(yī):遊客态:靜(jìng)默登錄成功​ ,未綁定手機(jī)号,無用(yòng)戶信息   ONE = 1,   // 階段二:會(huì)員(yuán)态:用(yòng)戶登錄成功,已綁定©€↓✔手機(jī)号,無用(yòng)戶信息   TWO = 2,   // 階段三:會(huì)員(yuán)信息态:用(yòng)戶登錄成功,已綁定手機(jī)γ♠号,有(yǒu)用(yòng)戶信息   THREE = 3, } 複制(zhì)代碼

那(nà)麽如(rú)何判斷用(yòng)戶此時(shí)處于哪個(gè)步驟,基于「₽¶靜(jìng)默登錄」的(de)啓發,原本「靜(jìng)默登錄」✔<↕♣成功開(kāi)發者後端會(huì)将自(zì)定義登錄态 auth-token返回給前端,此處請(qǐng)求可(kě)以攜帶返回「用(yòng)戶信 ​φ息」,同auth-token一(yī)起命名為(wèi)session存儲在本地(dì)storage當「用(yòng)戶登錄」或者「更新用(yòng)戶信≥®息」時(shí),會(huì)同步更新storagekey為(wèi)session的(de)數(shù)據,從(cóng)而通(tōng)過這(z♠&Ωhè)些(xiē)用(yòng)戶數(shù)據判斷₽✘δ當前用(yòng)戶處于哪一(yī)個(gè)登錄階段

以下(xià)表格列出了(le)session存儲的(de)部分(fēn)重要(yào)的(de)屬性以及在三個(gè)階段屬性對™‌÷≈(duì)應的(de)值。

屬性定義遊客态會(huì)員(yuán)态會(huì)員(yuán)信息态
authToken自(zì)定義登錄态'0d5bad172...''0d5bad172...''0d5bad172...'
uid用(yòng)戶 id'001''001''001'
busiIdentity用(yòng)戶身(shēn)份定義'VISIT''MEMBER''MEMBER'
nickName用(yòng)戶昵稱'''u_a1bk45''rileycai'
headUrl頭像鏈接'''''www.xx.com/image/...'
phone手機(jī)号碼'''17600888888''17600888888'
...其它用(yòng)戶信息.........

注意: 會(huì)員(yuán)态和(hé)會(huì)員(→←☆'yuán)信息态的(de)busiIdentity值均為(wèi)MEMBER,區(qū)分(fēn)會(huì)員(yuán)态和(hé)會(&↔↑huì)員(yuán)信息态可(kě)以通(tōng)過用(yòng)÷α‌戶昵稱和(hé)頭像等字段,比如(rú)用(yòng)戶登錄成功₹π∏∏會(huì)為(wèi)用(yòng)戶生(shēng)成以&¶™'u_'開(kāi)頭的(de)默認昵稱和(hé)默認為(wèi)空(kōng)的(de)φ ✔用(yòng)戶頭像鏈接。

判斷用(yòng)戶此時(shí)處于哪個(gè)步驟的(de)代碼如(rúΩδγ)下(xià):

  // 獲取當前授權階段   public getCurrentAuthStep(): AuthStepType {     // 切換賬号登錄的(de)時(shí)候,始終返回Auth®↓StepType.ONE     const loginMode = this.getLoginMode();     if (loginMode === LoginMode.SWITCH_ACC<¥✘×OUNT) return AuthStepType.ONE;      // 用(yòng)戶身(shēn)份定義非會(huì)員(yuán)返回¶±ε→AuthStepType.ONE     const userInfo = this.getUser();     if (userInfo?.busiIdentity !== 'MEMBER') return AuthStepType.ONE;      // 初次登錄,未授權用(yòng)戶信息,返回AuthStepTyσ♠$pe.TWO     if (userInfo.nickName.substring(0, 2) === 'u_' && !userInfo.headUrl)       return AuthStepType.TWO;      // 都(dōu)有(yǒu),返回AuthStepType.THR&→¥<EE     return AuthStepType.THREE;   } 複制(zhì)代碼

3.2.2 用(yòng)戶登錄觸發場(chǎng)景

前面提到(dào)過,「用(yòng)戶登錄」的(de) 目的(de)是(shì)為(wèi)了(le)整合各個(gè)渠道(dào)的 ♠γ'(de)交易、促銷、收藏等數(shù)據,針對(duì)電(diàn)商小(xiǎo)程序,目前總結的(de)需要(yào ☆≥)用(yòng)戶登錄的(de)場(chǎng)景如(rú)下(xià)所示:

即當用(yòng)戶登錄小(xiǎo)程序時(shí),可(kě∏λβ)以正常浏覽浏覽商品,隻有(yǒu)觸發某些(xiē)特定行(xíng)為(wèi),比如(rú)領券、加購(gòu)、✔∑♣₩收藏、下(xià)單等,才會(huì)判斷用(yòng)戶是(shì)否處于€×登錄狀态,如(rú)未登錄,跳(tiào)轉登錄頁面

如(rú)下(xià)所示,封裝mustAuth方法進行(xíng)攔截,未登錄則跳(tiào)轉登錄頁面:

export default class Session {   ...   public mustAuth({     m→$•★ustAuthStep = AuthStepType.TWO, // 傳人(rén)參數(shù),需要(yào)授權的(de)LEVEL   } = {}): Promise<void> {     // 當前階段處于會(huì)員(yuán)态(2)或♦↕‌‍者會(huì)員(yuán)信息态(3),執行(xíng)resolve操作("≥zuò)     if (this.getCurrentAuthStep() >= mustAuthSte£≥×∑p) return Promise.resolve();     // 當前階段處于遊客态(1),跳(tiào)轉登錄頁     Navigator.gotoPage('/login/home');     // 執行(xíng)reject操作(zuò)     return Promise.reject();   } } 複制(zhì)代碼

上(shàng)述代碼是(shì)跳(tiào)轉頁面攔截,對(duì)于彈窗(‍☆ σchuāng)而言,需要(yào)把彈窗(chuāng)注入base-page(每個(gè)頁面都(dōu)需要(yào)引入的(de)通(tōng)用(yò§±ng)組件(jiàn),封裝每個(gè)頁面都(dōu)需要(yào)☆☆使用(yòng)的(de)通(tōng)用(yòng)方法,比如(rú)錯(cuò)誤處理(€Ω∏£lǐ)等)中,通(tōng)過 id 查找到(dào)彈窗(chuā™✘ ↑ng)組件(jiàn),并進行(xíng)調用(yòng)。

export default class Session {   ...    public mustAuth({     must‌♦AuthStep = AuthStepType.TWO,∏✘$± // 需要(yào)授權的(de)LEVEL     popupCompName = 'auth-flow-popup',   } = {}): Promise<void> {     // 當前階段處于會(huì)員(yuán)态(2)或×&≤者會(huì)員(yuán)信息态(3),執行(xíng)resolve操作(zuò)     if (this.getCurrentAuthStep() >= mustAuthStep)§• return Promise.resolve();     // 獲取彈窗(chuāng)組件(jiàn)     const pages = getCurrentPages();     const curPage = pages[pages.length ♥‍♠ - 1];     const context = curPage.$$basePage || curPage;     const popupComp = context.selectComponent(`#${popupCompName}`);     // 容錯(cuò)處理(lǐ)     if (!popupComp) {       return Promise.reject(         new Error(           "當前頁面未找到(dào) #auth-popup 組件(jiàn),₩α‌¥請(qǐng)參考 'doc/登錄組件(jiàn)的★←≠γ(de)使用(yòng)方式.md'",         ),       );     }     // 調用(yòng)彈窗(chuāng)組件(jiàn)方法     popupComp.setMustAuthStep(mus∞₩tAuthStep);     popupComp.nextStep();     // 等待授權成功回調     return this.waitAuth();   } }  複制(zhì)代碼

各個(gè)業(yè)務使用(yòng)時(shí)可(kě)以∑₩π™通(tōng)過session.mustAuth().then(() => {...});進行(xíng)調用(yòng),為(wèi)了(le)提高(gāo)使用(y∑✘σòng)體(tǐ)驗,也(yě)可(kě)以使用(yòng)裝飾器™←∑(qì)@mustAuth()來(lái)修飾各個(gè)業(yè)務需求&nbs​Ω×p;類的(de)方法,裝飾器(qì)源碼如(rú)下(xià):

/**  * 登錄檢查裝飾器(qì),使用(yòng)該裝飾器(qì)的(de)方法,會(hu♠ε←ì)先執行(xíng)授權檢查,如(rú)果未授權,将®™跳(tiào)轉登錄頁面  */ export default function mustAuth(option = {}) {   return function(     _target: Record) {     const method = descriptor.value;     des→↓criptor.value = function(...args: any[]) {       if (!session) return;       // 登錄攔截       return session.mustAuth(option).tε$hen(() => {         if (method) return method.apply(this, args);       });     };   }; } 複制(zhì)代碼

3.3 UI

3.3.1 基礎組件(jiàn)

1. phone-container 組件(jiàn)

因為(wèi)需要(yào)用(yòng)戶主動觸發才能(né÷÷±∑ng)發起獲取微(wēi)信授權手機(jī)号接口,需用(yòng)™©™÷ button 組件(jiàn)的(de)點擊來(lái)觸發。組件(jiàn)代碼如(rú)下(xi∑ £₽à)所示:

// index.wxml    // index.ts export default class PhoneContainer extends BaseComponent {   getPhoneNumber(     e: WechatMiniprogram.Event,   ) {     this.triggerEvent('getphonenumber', { ...e.detail,  authType: AuthType.PHONE,});   } } 複制(zhì)代碼

phone-container是(shì)一(yī)個(gè)純 UI 組件(jiàn),通π®&(tōng)過triggerEvent事(shì)件(jiàn)将獲取手機(jī)号數(shù)據傳遞給父組件(jiàn&&‌&),

2. user-container 組件(jiàn)

user-container組件(jiàn)是(shì)獲取微(wēi)信授權用(yò✔♠ng)戶信息的(de)純 UI 組件(jiàn),之前通(tōng)過

 

2012 年(nián) 4 月(yuè) 13 日(rì)之前,使用(yòng)wx.getUserInfo彈出授權彈窗(chuāng)時(shí),如(rú)ε∞" 果用(yòng)戶點擊允許授權,那(nà)麽會(huì)記錄用(yòng)戶的(de♥←β)行(xíng)為(wèi),下(xià)次再點擊時(shí),不(bù)會(huì)彈窗(chuāng)而是(shì)直接将授權結果返回。4 月(yuè) 13 日(rì)≤↕ 之後後,使用(yòng)wx.getUserProfile開(kāi)發者每次通(tōng)過該接口獲取用(yòng)戶個(gè)☆≥₽ 人(rén)信息均需用(yòng)戶确認,因此需要(yào)妥善保管用(yòng)戶授權的(∑'¶de)頭像昵稱,避免重複彈窗(chuāng)。

3.3.2 行(xíng)為(wèi)類

如(rú)下(xià)圖所示,auth-flow行(xíng)為(wèi)類主要(yào)封裝用(yòng)戶、小(xiǎo)程序、服務端三♠©±•者之間(jiān)的(de)交互邏輯。

在「微(wēi)信授權登錄」過程中,小(xiǎo)程γ' 序拿(ná)到(dào)加密的(de)encryptedData和(hé)iv數(shù)據,将其和(hé)攜帶的(de)auth-token一(yī)起發送給開(kāi)發者服務器(qì),服務端通(tōng)過auth-token鑒權識别這(zhè)個(gè)用(yòng)戶,并使用(yòng)靜(jìng)默登錄成功獲取的(≤∞<de)session_key(對(duì)稱解密密鑰)對(duì)encryptedData和(hé)iv數(shù)據進行(xíng)對(duì)稱解密,獲取該用(yòng)戶的(de)手>↓$機(jī)号,将手機(jī)号與uid綁定,此時(shí)該用(yòng)戶成功注冊會(huì)員(yε∞πuán),并将會(huì)員(yuán)信息返回給小(xiǎo)程序♦πε​端。

小(xiǎo)程序端更新本地(dì)storage存儲的(de)session數(shù)據,此時(shí)busiIdentity的(de)值已經從(cóng)VISIT更新為(wèi)MEMBER,用(yòng)戶身(shēn)份轉變為(wèi)會(huì)員(yuán)态,登錄成功。

在「授權用(yòng)戶信息」的(de)過程中,小(xiǎδσ'o)程序調用(yòng)wx.getUserProfile方法拿(ná)到(dào)用(yòng)戶數(shù)據,并将這(zhè)些γ (xiē)數(shù)據與攜帶的(de)auth-token一(yī)起發送給開(kāi)發者服務器(qì),服務端通(tΩ™ōng)過auth-token鑒權識别這(zhè)個(gè)用(yòng)戶,更新該用≥♦(yòng)戶的(de)信息并将新的(de)會(huì)員(yuán)數(s∑★®hù)據返回給小(xiǎo)程序端。

小(xiǎo)程序端更新本地(dì)storage存儲的(de)session數(shù)據,此時(shí)用(yòng)戶昵稱和(hé)頭像均已更新,用(yò ¶γφng)戶身(shēn)份轉變為(wèi)會(huì)員(yuán)信息态,授權成功。

眼尖的(de)讀(dú)者一(yī)定觀察到(dào)了(le),時(shí)序圖中還(¶∏hái)對(duì)微(wēi)信頭像做(zuò)了©γ α(le)轉存。這(zhè)是(shì)因為(wèi)ε€↔£用(yòng)戶在微(wēi)信端修改微(wēi)信頭像後,之前「授權用(yòn‍​×g)戶信息」獲取的(de)微(wēi)信頭像鏈接就(jiù)會(huì)失效,因此開(kāi)發者應該在自(zì)己獲取用(yòng)戶信息後, σ将頭像保存下(xià)來(lái),避免微(wēi)信頭像 URL 失效後的(de)≈•↓↕異常情況。

3.3.3 通(tōng)用(yòng)組件(jiàn)

通(tōng)用(yòng)組件(jiàn)是(shì)對(dβ©♥♠uì)基礎組件(jiàn)和(hé)行(xíng)為(wèi)類的(de)二次<→封裝,主要(yào)是(shì)為(wèi)業(yè)務"÷§≈層提供彈窗(chuāng)登錄和(hé)頁面登錄兩種能(nén‌₽σg)力。

4. 總結

我們将用(yòng)戶登錄能(néng)力從(cóng)業(α☆yè)務層中抽象出來(lái),統一(yī)封裝在service層,便于複用(yòng)。本文(wén)主要(yào)講述的(de)≥¶是(shì)service層的(de)架構,對(duì)于業(yè)務層的(de)邏輯實現(xiàn)并沒有(yǒu)多‌€★(duō)加累贅。下(xià)列表格以小(xiǎo)程序端為(wèi)例,簡述了(le)「靜§£(jìng)默登錄」和(hé)「用(yòng)戶登錄」整套方案的(de)前後端邏輯實現(xi¥¥↔àn)。

業(yè)務場(chǎng)景用(yòng)戶感知(zhī)前端處理(lǐ)邏輯後端處理(lǐ)邏輯補充說(shuō)明(míng)
掃碼搜索等各種方式進入小(xiǎo)程序1、判斷:當前小(xiǎo)程序是(shì)否緩存了(le)登錄态 ♣☆auth-token 且使用(yòng)wx.checkSeesion檢查當前用(yòng)戶在小(xiǎo)程序中登錄态是(shì)★ 否過期,過期執行(xíng)步驟 2;
2、使用(yòng)wx.login獲取認證信息,請(qǐng)求後端wxLogin接口獲取微(wēi)信小(xiǎo)程序認證默認綁定的(de)用(yòng)戶身(shēn)份以及登錄态auth-token
1、解析微(wēi)信加密信息獲取認證身(shēn)份openid和(hé)unionId
2、查找openid是(shì)否已經綁定了(le)對(duì)應的(de)用(yòng)戶​∞,若綁定直接返回并為(wèi)其生(shēng)成對(duì)應的(de)登錄态auth-token
3、新用(yòng)戶會(huì)根據openid為(wèi)其自(zì)動生(shēng)成一(yī)個(gè)用(yòng)戶身(≈≥shēn)份uid(見(jiàn)右補充說(shuō)明(míng))。
a、存在聚合根标識unionId && 有(yǒu)用(yò✘"☆↓ng)戶信息:将已有(yǒu)聚合根用(yòng)戶對(duì)應的(de)exUid直接映射到(dào)當前uid下(xià);
b、存在聚合根标識unionId && 無用(yòng)戶信息:根據unionId生(shēng)成對(duì)應的(de)賬号,但(dàn)和(hé)opneid對(duì)應的(de)uid一(yī)緻;
c、不(bù)存在聚合根标識:直接為(wèi)對(duì)應openid初始化(huà)一(yī)個(gè)uid
收藏加購(gòu)下(xià)單領券等操作(zuò)攔截跳(tiào)轉1、判斷: 當前用(yòng)戶身(shēn)份處于遊客态,跳(tiào)轉登錄頁面。對(duì)應域服務後端接口可(kě)以根據請(qǐng)求攜帶★"的(de)auth-token進行(xíng)鑒權,判斷用(yòng)戶是(shì)否有(yǒu)操作(zuò)權限-
用(yòng)戶登錄 或者 切換賬号選擇:

相(xiàng)關案例查看(kàn)更多(duō)

相(xiàng)關閱讀(dú)

三年中文在线观看免费大全_三年大片免费高清哔哩哔哩_三年在线观看免费大全哔哩_三年大全免费大片三年大片_三年在线观看免费大全_三年大片观看免费大全哔哩哔哩_三年中文在线观看免费高清第4版_三年中文免费视频大全_三年大片大全免费观看大全_三年大片在线观看哔哩哔哩_三年在线观看中文免费观看_三年成都中文在线观看免费版