三年中文在线观看免费大全_三年大片免费高清哔哩哔哩_三年在线观看免费大全哔哩_三年大全免费大片三年大片_三年在线观看免费大全_三年大片观看免费大全哔哩哔哩_三年中文在线观看免费高清第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)是(s≤←≠hì)小(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)&nbs♣φ÷£p;wx.login 獲取到(dào) code ,将其發送到(dào)開(kāi)發者後端,開(kāi)發者後端通(tōng)過> ♠接口去(qù)微(wēi)信後端換取到(dào) openid 和(hé) sessionKey(現(xiàn)在會(huì)将 unionid 也(yě)一(yī)并返回)後,然後把自(zì)定義登錄态&n★ ✔♥bsp;3rd_session(本業(yè)務命名為(wèi)auth-token) 返回給前端,就(jiù)已經完成登錄行(xíng)為(wèi)了(lδφe)。

理(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ī)無二的(de)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òng)"£↕←戶操作(zuò)之前,會(huì)判斷用(yòng)戶是(shì)否登錄,如(rα"₽ú)若用(yòng)戶未登錄,則跳(tiào)轉登錄頁面,整個(gè)'•λ流程如(rú)下(xià)所示:

比如(rú)在「用(yòng)戶中心」頁面點擊「我的(de)訂單」,由于此時↓≥​(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ì) →₽≥「會(huì)員(yuán)信息」 進行(xíng)維護 ,比如(rú)昵稱、頭像、性别、生(shē$"★ng)日(rì)等信息,最簡單的(de)方法是(shì) 獲取「微(wēi)信授權用(yòng)戶信息」。觸發時(shí)機(jī)分(fēn)為(wèi)以下(xià)兩種:

  1. 用(yòng)戶第一(yī)次選擇 「微(wēi)信授權登錄」 成功後跳(tiào)轉授權用(yòng)戶信息頁面,點↕‌δ擊 「授權用(yòng)戶信息」,彈出授權用(yòng)戶信息彈窗(chuāng)。點擊「允許」,跳(t₽ ∏​ià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àn ≈≈g)圖所示,将所有(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),類似于 TCλε×↑P 慢(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)中的(de)請(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à)所示,小(x'÷★♦iǎ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)默登錄」的(dπ≈φe)啓發,原本「靜(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)戶信息」時(s♣βhí),會(huì)同步更新storagekey為(wèi)session的(de)數(shù)據,從(cóng)而通(tōng)過這(zhè)些(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ōn•±g)過用(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(): Au₽φεthStepType {     // 切換賬号登錄的(de)時(shí)候,始終返回AuthStepType.‍¥ONE     const loginMode = this.getLoginMode();     if (loginMode === LoginMode.SWITCH_ACCOUNT) return AuthStepType.ONE;      // 用(yòng)戶身(shēn)份定義非會(huì)員(yuán)返回Aut≥≥hStepType.ONE     const userInfo = this.getUser();     if (userInfo?.busiIdentity !=®♥= 'MEMBER') return AuthStepType.ONE;      // 初次登錄,未授權用(yòng)戶信息,返回AuthStepType.TWO     if (userInfo.nickName.substring(0, 2) === 'u_' && !userInfo.headUrl)       return AuthStepType.TWO;      // 都(dōu)有(yǒu),返回AuthStepType.THREE     return AuthStepType.THREE;   } 複制(zhì)代碼

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

前面提到(dào)過,「用(yòng)戶登錄」的(d>≠✔™e) 目的(de)是(shì)為(wèi)了(le)整合各個(g €è)渠道(dào)的(de)交易、促銷、收藏等數(shù)±•據,針對(duì)電(diàn)商小(xiǎo)程序,目前總結的(d‌™<e)需要(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({     mustAu÷→™thStep = AuthStepType.TWO, // 傳人(rén)參數(shù),需要(yào)授權的(de)L£↓÷÷EVEL   } = {}): Promise<void> {     // 當前階段處于會(huì)員(yuán)态(2)或者$∏§會(huì)員(yuán)信息态(3),執行(xíng)re✘★₹∏solve操作(zuò)     if (this.getCurrentAuthStep() >=≈​♦→ mustAuthStep) 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({  ₩∏   mustAuthStep = 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() >= muσ₹≤stAuthStep) 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(mustA♥δuthStep);     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;     φ♠descriptor.value = function(...args: any[]) {       if (!session) return;       // 登錄攔截       return session.mustAuth(option).then(() => {         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ù)據傳遞給父組件(j₹ &ià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òn↔¶σg)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ì)員(yuá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ē)數(s ₽™★hù)據與攜帶的(de)auth-token一(yī)起發送給開(kāi)發者服務器(qì),服務端通€'÷'(tōng)過auth-token鑒權識别這(zhè)個(gè)用(yòng)戶,更新¥₹®該用(yòng)戶的(de)信息并将新的(de)會(huì)員‍¶(yuán)數(shù)據返回給小(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ò)了(l$§∏e)轉存。這(zhè)是(shì)因為(wèi)用(yòng)戶在微(wēi)信端修改微(wēi)信頭♣$÷←像後,之前「授權用(yòng)戶信息」獲取的(de)微(wēi)信頭像鏈​£∞•接就(jiù)會(huì)失效,因此開(kāi)發者應該在自(zì)己獲取用(yòn£≥Ωg)戶信息後,将頭像保存下(xià)來(lái),避免微(wēi)信頭像 URL 失₹★效後的(de)異常情況。

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

通(tōng)用(yòng)組件(jiàn)是(shì)對(duì)基礎組件(jiàn)和(&±→εhé)行(xíng)為(wèi)類的(de)二次封裝,主要(yào)是(λ shì)為(wèi)業(yè)務層提供彈窗(chuāng)登錄和(hé)頁面登錄兩種能(néng)& §力。

4. 總結

我們将用(yòng)戶登錄能(néng)力從(cóng)業(yè)¶↓¥$務層中抽象出來(lái),統一(yī)封裝在service層,便于複用(yòng)。本文(wén)主要(yào)講述的(d×±₹£e)是(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)成對(d☆ βuì)應的(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版_三年中文免费视频大全_三年大片大全免费观看大全_三年大片在线观看哔哩哔哩_三年在线观看中文免费观看_三年成都中文在线观看免费版