一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

注冊登錄

微信小程序授權登錄方案以及在Taro下利用Decorator修飾器實現

2018-09-14
導讀:選用Taro做技術框架的原因:最近公司需要開發一款新的小程序,主要是做付費知識相關的產品,涉及到了虛擬商品支付,對于IOS的對于虛擬商品支付的種種限制,加上類似小程序的相關...

選用Taro做技術框架的原因:最近公司需要開發一款新的小程序,主要是做付費知識相關的產品,涉及到了虛擬商品支付,對于IOS的對于虛擬商品支付的種種限制,加上類似小程序的相關調研,決定IOS支付的方式走h5公總號支付繞開限制,所以在框架選型上面需要一套代碼加一點兼容代碼,就可以生成小程序和H5版本的庫,考慮到本身技術棧以react為主,所以最后老大選擇了Taro進行開發

對于Taro的簡單介紹以及提供能力可以瀏覽 Taro初探

需求場景

在微信小程序里面,需要做助力、拼團等邏輯的時候,有些需要鑒權的接口等,要再用戶授權登錄完畢之后,在請求的 header 帶上用戶的 accessToken ,所以要確保這些接口在用戶登錄完成之后再開始進行請求

之所以要用戶授權登錄而不用小程序的靜態登錄方式,是因為在兼容H5的時候,登陸流程是通過公眾號登錄的,在不想產生多余的數據下,使用用戶的 union_id 作為唯一依據,用 wx.login這種形式拿用戶的 code 登錄只能拿到 open_id ,與我們的需求不符合

UnionID機制說明 · 小程序

我們這邊與后端約定是先通過用戶授權 wx.getUserInfo ,拿到用戶信息發送給后端進行注冊或者登陸,后端返回一個 accessToken 作為用戶的憑證,調用其他接口的時候在 header 帶著這個 accessToken ,后端就能在需要的時候根據 accessToken 獲取到當前用戶信息

小程序的登錄流程如下

 

由于小程序的生命周期機制,生命周期是異步執行的,生命周期之間是無法阻塞執行,如果在 onLaunch 的時候進行用戶登錄的邏輯,在弱網的情況下,會出現一種情況就是用戶登錄沒完成的情況下,還沒拿到 accessToken 就開始了page里面的請求接口,這樣會導致接口報錯

解決思路

利用修飾器 Decorator 、React的高階組件 HOC 以及 async/await ,劫持當前頁面調用接口的聲明周期,等待封裝好的用戶登錄邏輯執行完以后,再進行當前聲明周期里面其他調用的執行。

舉個例子

在分享助力的場景下,新用戶點擊分享用戶的卡片進來小程序,需要彈出一個授權彈框等用戶授權登陸成功以后,才能進行助力接口的調用。

要注意的是,劫持的是當前聲明周期的方法,并不會阻塞到其他生命周期,例如劫持 willMount 的時候, didShow 、 didMount 等周期依然會照樣按順序執行,并不會等待 willMount 結束后再進行

代碼分享

主要分享修飾器的使用以及作用,登陸邏輯主要參考流程圖即可,代碼暫不做分享

寫一個能劫持傳入組件生命周期的修飾器

由于Taro暫時不支持無狀態組件,所以只能使用HOC的反向劫持能力,繼承傳入的組件,這個時候就可以通過等待登錄邏輯完成,再執行劫持的生命周期

withLogin.js
const LIFE_CYCLE_MAP = ['willMount', 'didMount', 'didShow'];

/**
 *
 * 登錄鑒權
 *
 * @param {string} [lifecycle] 需要等待的鑒權完再執行的生命周期 willMount didMount didShow
 * @returns 包裝后的Component
 *
 */
function withLogin(lifecycle = 'willMount') {
  // 異常規避提醒
  if (LIFE_CYCLE_MAP.indexOf(lifecycle) < 0) {
    console.warn(
      `傳入的生命周期不存在, 鑒權判斷異常 ===========> $_{lifecycle}`
    );
    return Component => Component;
  }
    
  return function withLoginComponent(Component) {
    // 避免H5兼容異常
    if (tool.isH5()) {
      return Component;
    }
      
    // 這里還可以通過redux來獲取本地用戶信息,在用戶一次登錄之后,其他需要鑒權的頁面可以用判斷跳過流程
    // @connect(({ user }) => ({
    //   userInfo: user.userInfo,
    // }))
    class WithLogin extends Component {
      constructor(props) {
        super(props);
      }

      async componentWillMount() {
        if (super.componentWillMount) {
          if (lifecycle === LIFE_CYCLE_MAP[0]) {
            const res = await this.$_autoLogin();
            if (!res) return;
          }

          super.componentWillMount();
        }
      }

      async componentDidMount() {
        if (super.componentDidMount) {
          if (lifecycle === LIFE_CYCLE_MAP[1]) {
            const res = await this.$_autoLogin();
            if (!res) return;
          }

          super.componentDidMount();
        }
      }

      async componentDidShow() {
        if (super.componentDidShow) {
          if (lifecycle === LIFE_CYCLE_MAP[2]) {
            const res = await this.$_autoLogin();
            if (!res) return;
          }

          super.componentDidShow();
        }
      }
    }
      
    $_autoLogin = () => {
      // ...這里是登錄邏輯
    }
  }
}

export default withLogin;
復制代碼
注意

使用的組件內必須有對應定義的生命周期,而且 不能使用箭頭函數式 ,例如 componentWillMount(){} 不能寫成 componentWillMount = () => {} ,會劫持失敗

需要登錄鑒權頁面的使用方式pages/xxx/xxx.js
import Taro, { Component } from '@tarojs/taro';
import { View } from '@tarojs/components';
import withLogin from './withLogin'

@withLogin()
class Index extends Component {
  componentWillMount(){
    console.log('Index willMount')
    // 需要帶accessToken調用的接口等 
  }
    
  componentDidMount(){
    console.log('Index didMount')  
  }

  render() {
    console.log('Index render');

    return <View />;
  }
}

export default Index;
復制代碼
注意
  1. 如果在繼承的時候使用了redux去connect了數據,使用之后已自動為組件的props附帶上connect的數據,被修飾的組件不需要再connect去拿這一個數據, 不然可能會出現報錯 Setting data field "xxx" to undefined is invalid .

利用修飾器這個特性,我們還可以對小程序做一層瀏覽打點,分享封裝等操作

重磅推薦:小程序開店目錄

第一部分:小商店是什么

第二部分:如何開通一個小商店

第三部分:如何登錄小商店

第四部分:開店任務常見問題

第五部分:小商店可以賣什么

第六部分:HiShop小程序特色功能

第七部分:小程序直播

第八部分:小程序收貨/物流

第九部分:小程序怎么結算

第十部分:小程序客服

第十一部分:電商創業

第十二部分:小程序游戲開發

電話咨詢 微信咨詢 預約演示 0元開店
主站蜘蛛池模板: 色一色成人网|久草在线影|精品视频在线观看99|国产香蕉尹人视频在线|亚洲=a∨好看=av高清在线观看|亚洲欧美日本在线 | 国产精品婷婷色综合www在线|丰满风流护士长BD=a片|国产精品福利片|农村人伦偷精品视频=a人人澡|久热免费在线视频|18禁美女黄网站色大片免费网站 | 精品亚洲永久免费精品鬼片影片|国产色啪午夜免费福利|亚洲国产1区|国产福利不卡|9熟女PRO内射|91精品婷婷色国产综合 | yell视频在线观看免费|www.三级影片.com|午夜啪啪片|色爱亚洲|顶级欧美熟妇高潮xxxxx|紧缚调教一区二区三区视频 | 性情中人中文网|欧美老熟妇XB水多毛多|欧美波霸影院|炼气练了三千年第四季在线观看|免费一区二区三区在在线视频|艾草在线精品视频免费观看 | 免费在线观看黄色大片|综合一区无套内射中文字幕|你好星期六在线免费观看|91探花福利精品国产自产在线|成人18夜夜网深夜福利网|九九影院理论片在线观看一级 | 天天超逼|综合一区二区三区|鲍鱼=av在线|农村黄色片|国产96精品|亚洲热线99精品视频 | 轻轻草在线观看|国产美女遭强高潮网站|色综合视频在线观看|久久久久久久久久久久久久久|www久久艹|久久国产传媒 | 免费无码黄网站在线看|九九在线精品视频|h黄动漫免费网站|成人小说亚洲一区二区三区|极品老师腿张开粉嫩小泬|婷婷开心中文字幕 | 亚洲精品第一页|边吃吃奶边扎下面很紧爽|porno麻豆|五月天婷五月天综合网|国产精品理论在线无码|国产资源网站 | 国产内谢|成人=av高清|91在线成人影院|国产性猛交xxxx免费看|一级做=a爰片久久毛片苍井优|麻豆视频在线 | 亚洲啪啪|麻豆视传媒短视频免费官网|成人啪啪178|一区二区三区四区高清精品免费观看|日本一区二区三区免费看|久草视频免费播放 | 老妇激情毛片免费|草草福利视频|国产精品国产自线拍免费软件|日本免费一级视频|国产在线观看|无码区国产区在线播放 | 国产伦精品一区二区三区免费|天天躁日日躁狼狼超碰97|综合亚洲视频|欧美性生交XXXXX无码小说|成年人免费网站在线观看|96国产精品 | 国产精品二区影院|久久99热精品|一级黄片毛片免费|sihu在线|亚洲精品女|99vv1com这只有精品 | 特级毛片免费观看视频|国产精品视频久久久久久久|免费看=a级大片|浴室人妻的情欲HD三级|麻豆.=apk|在线片播放 | 成人国产午夜在线观看|久久综合九色综合97欧美|99视频免费观看|久久久久久久国产精品毛片|久久99精品国产99久久|天堂成人国产精品一区 | 最近中文字幕在线mv视频在线|#NAME?|色惰网站|草逼一区|免费精品国产的网站免费观看|播放日韩一级黄色片 | 永久=av免费|人妻无码久久久久久久久久久|66成人网|麻豆视频免费在线播放|亚洲视频综合在线|在线看片 | 成人黄色网址大全|轻点好疼好大好爽视频|欧洲女人牲交性开放视频|377人体粉嫩噜噜噜|伊人热热久久原色播放WWW|在线色网站 国产精品一区二区三区不卡视频|精品国产人成在线|成人久久秘|少妇性l交大片7724com|九色自拍蝌蚪|欧美黄动漫 | 爆乳肉体大杂交SOE646在线|51vv社区视频在线视频观看|中文视频在线观看|国产网红=av|久久婷婷五月综合色奶水99啪|国产一级淫片免费 | 精品久久久久久亚洲综合网站|c=aopeng人人|蜜桃婷婷|国产高潮抽搐在线观看|中文字幕亚洲专区|第四色中文综合网 | 国产视频资源|日日摸久久久精品|男人午夜视频|山外人精品影院|一区二区三区=av夏目彩春|久久网精品三级片 | 成人=av一区二区三区在线观看|欧美日韩中文字幕一区二区三区|#NAME?|青青草视频网|日韩=av在线一区二区三区|老司机在线精品视频播放 | c=aopom成人免费公开视频|中文字幕欧美人妻精品一区|91九幺丨成人|日韩久久国产|三年片大全免费观看|久草在在线 | 亚洲综合一区在线|日本免费一区二区三区在线播放|亚洲毛片免费观看|国产九色精品|多人调教到高潮失禁h重口视频|亚洲国产精品无码久久九九大片 | 日韩在线精品一区|久久久久久视|成人=av一级|欧美一区二区三区视频在线播放|久久久久久久999|色欲人妻综合=a=a=a=a=a=a=a=a网 | 人人精品久久|无码=aV潮喷|国产小视频国产精品|18深夜在线观看免费视频|好久被狂躁=a片视频无码免费视频|国产一级淫片=a免费播放鬼片 | 2019久久久|91女同|#NAME?|亚洲福利在线视频|国产猛烈高潮尖叫视频免费|久久精品国产72国产精 | 秋霞福利视频|亚洲精品1234区|国产一级久久久久|在线91|国产做=a爱片久久毛片=a片|天天爱天天做天天做天天吃中文 | 狂野=aV人人澡人人添|天天干夜夜擦|两个人的www免费高清视频|永久免费看mv网站入口亚洲|久久一区二区三区四区|亚洲男人网 | 三级日韩|亚洲=aⅴ在线|成人精品玖玖资源在线播放|黄网在线免费观看|免费观看又色又爽又湿的软件|奇米四色888 | 亚洲=av无码=av另类专区|久久日韩精品无码一区|日韩精品中文在线|久久精品国产综合|c=aoporm超碰国产牛牛|九色国产蝌蚪视频 | 少妇天天干|一本久道久久综合中文字幕|色哟哟国产成人精品免费|国产主播户外勾搭人xx|精品无人区无码乱码毛片国产|亚洲欧美中日精品高清一区二区 | 久久99国产一区二区三区|99热这里只有精|护士做xxxxx免费看国产|色情一区二区三区免费看|亚洲天堂精品在线|欧美极品kenn=aj=ames喷水 | 精品久久久久久亚洲综合网站|c=aopeng人人|蜜桃婷婷|国产高潮抽搐在线观看|中文字幕亚洲专区|第四色中文综合网 | 日本真人边吃奶边做爽动态图|青娱乐激情视频|日本熟妇人妻XXXXX免费看|日本天堂免费|国产麻豆xxxxhdfree|亚洲码欧美码一区二区三区 | 一本一道波多野毛片中文在线|久久久久久久久久亚洲精品|高潮又爽又黄又无遮挡免费软件|57p=ao国产成永久免费视频|在线国产欧美|九草=av | 久久白虎|18禁成人网站免费观看|国产www视频在线观看|欧美黄色=a级大片|国产精品久久久久久久人人看|日韩精品毛片 | 国产无码一区二区|韩日午夜|国产精品男人天堂|免费在线观看国产黄|欧美精品黑人粗大|欧美一区观看视频 | 久久99国产一区二区三区|99热这里只有精|护士做xxxxx免费看国产|色情一区二区三区免费看|亚洲天堂精品在线|欧美极品kenn=aj=ames喷水 |