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

商城系統(tǒng) 注冊

微信小程序登錄會話流程

2018-05-18|HiShop
導(dǎo)讀:背景 微信 小程序 的使用可以快速的基于場景進行用戶圈的建立推廣,其中根據(jù)業(yè)務(wù)需要使用用戶信息以及授權(quán)過程...

背景

微信小程序的使用可以快速的基于場景進行用戶圈的建立推廣,其中根據(jù)業(yè)務(wù)需要使用用戶信息以及授權(quán)過程,主要用到的有微信在開發(fā)工具中已經(jīng)封裝好的 api 函數(shù):wx.login、wx.getUserInfo、wx.checkSession、wx.getStorageSync、wx.request等

微信小程序登錄會話流程

1. 關(guān)鍵詞

  • 開放數(shù)據(jù)
    調(diào)用 wx.getUserInfo(此接口有調(diào)整,使用該接口將不再出現(xiàn)授權(quán)彈窗,使用 <button open-type="getUserInfo" ></button>引導(dǎo)用戶主動進行授權(quán)操作) 成功時 返回的用戶開放數(shù)據(jù),可以在任意時候獲取,但其中的加密數(shù)據(jù)encryptedData需要使用用戶的session_key作為秘鑰進行解密才能得到原始完整數(shù)據(jù)。為了防止返回的數(shù)據(jù)被人篡改偽造,開發(fā)者可以將 signature、rawData 發(fā)送到開發(fā)者服務(wù)器進行校驗。服務(wù)器利用用戶對應(yīng)的 session_key 使用相同的算法計算出簽名 signature2 ,比對 signature 與 signature2 即可校驗數(shù)據(jù)的完整性。返回結(jié)果主要包括:
     參數(shù)             類型                          說明
    userInfo         OBJECT        用戶信息對象,不包含 openid 等敏感信息
    rawData          String        不包括敏感信息的原始數(shù)據(jù)字符串,用于計算簽名。
    signature        String        使用 sha1( rawData + sessionkey ) 得到字符串,用于校驗用戶信息,參考文檔 signature。
    encryptedData    String        包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù),詳細見加密數(shù)據(jù)解密算法
    iv               String        加密算法的初始向量,詳細見加密數(shù)據(jù)解密算法
//調(diào)用成功后返回結(jié)果示例
{
encryptedData:"6exNeBvACX+EpzLNF2vYRhM0Z1tNZnBOYP0Qh6jQ4Ofv+69qY/RGVAB34aj4f364mkjAAD5pgDDJ41hGkkr/IaHJGioI3EhGSEQyrAfE1mPovV9s6Prg4rKedfBUerG4jEgXbS0GeERMtJ15tqEGz7qzcA49c1D1obZTuneImZq1vB1lXo3oUbnmK7LUAxQcgCQA==",
errMsg:"getUserInfo:ok",
iv:"X6PuFoueBpfgyjV9l9D6A==",
rawData:"{"nickName":"xxx","gender":1,"language":"zh_CN","city":"","province":"","country":"Iceland","avatarUrl":"https://wx.qlogo.cn/mmsen/vi_s/0daYVYsscPNxEvALzBTsJarXwUmlxjZJZMHPM6NNLegH4wLRcRlsA1x4bsJg/132"}",
signature:"c32wba325164258b9a332b6fdsdew2e520081348",
userInfo:
    {
        avatarUrl:"https://wx.qlogo.cn/mmsen/vi_s/0daYVYsscPNxEvALzBTsJarXwUmlxjZJZMHPM6NNLegH4wLRcRlsA1x4bsJg/132",
        city:"",
        country:"Iceland",
        gender:1,
        language:"zh_CN",
        nickName:"xxx",
        province:""
     }
}
  • 敏感數(shù)據(jù)獲取(加密數(shù)據(jù)encryptedData簽名signature)

     

    對于encryptedData,開發(fā)者如需要獲取敏感數(shù)據(jù),需要對接口返回的加密數(shù)據(jù)( encryptedData )進行對稱解密。
    也就是需要在開發(fā)者服務(wù)器上利用session_key解密獲得的encryptedData,其結(jié)構(gòu)如下:
{
    "openId": "OPENID",
    "nickName": "NICKNAME",
    "gender": GENDER,
    "city": "CITY",
    "province": "PROVINCE",
    "country": "COUNTRY",
    "avatarUrl": "AVATARURL",
    "unionId": "UNIONID",
    "watermark":                      //數(shù)據(jù)水印
    {
        "appid":"APPID",              //敏感數(shù)據(jù)歸屬appid,開發(fā)者可校驗此參數(shù)與自身appid是否一致  
        "timestamp":TIMESTAMP         //敏感數(shù)據(jù)獲取的時間戳, 開發(fā)者可以用于數(shù)據(jù)時效性校驗
    }
}
  • 自定義登錄態(tài)
    環(huán)境:開發(fā)者服務(wù)器上
    數(shù)據(jù):利用接口調(diào)用獲得的開放數(shù)據(jù)或者解密后的敏感數(shù)據(jù)以及session_key
    操作:利用數(shù)據(jù)建立用戶在小程序的唯一標識,以及發(fā)送自己定義的登錄狀態(tài)信息記錄session(也可以是其他的信息記錄)給客戶端,session_key作為秘鑰,必須保存在開發(fā)者服務(wù)器上(以前接口https://api.weixin.qq.com/sns... 可以在小程序開發(fā)設(shè)置--服務(wù)器配置里設(shè)置為合法地址,現(xiàn)在不行了,只能使用第三方服務(wù)器進行接口調(diào)用)
    使用: 用戶非首次登陸——>查詢本地緩存中的自定義session——>獲取到session向開發(fā)者服務(wù)器查詢——>服務(wù)器上此session未過期可用——>用戶可正常業(yè)務(wù)請求(這只是登陸情況比較普遍正常的一種)

2.登錄

官方給的圖示:(大概步驟可以看官方文檔)

 

基本:其中使用wx.login()可以獲得開發(fā)者服務(wù)器向微信接口服務(wù)器請求獲得session_key等數(shù)據(jù)時所需要的參數(shù)code,開發(fā)者服務(wù)器以code+appid+app secret(小程序秘鑰,管理后臺可以獲得)換取 用戶唯一標識openid 和 會話密鑰session_key。但每一次調(diào)用wx.login()都會更新微信接口服務(wù)器上的session_key。

  • 首次登錄

    獲取登錄憑證code——>發(fā)送至開發(fā)者服務(wù)器構(gòu)造接口( appid + app secret + code) 請求 微信接口服務(wù)器數(shù)據(jù)——>返回用戶數(shù)據(jù)密鑰session_key 和唯一標識openid給開發(fā)者服務(wù)器——>根據(jù)session_key 和 openid等生成自定義的第三方session,存儲session_key至開發(fā)者服務(wù)器,不能將session_key發(fā)送至客戶端,防止敏感數(shù)據(jù)泄露——>將第三方自定義登錄信息session發(fā)送至客戶端——>保存自定義第三方登錄態(tài)信息session到本地緩存,登錄成功,可以設(shè)置一個登錄標識flag,使flag=true表示首次登錄成功,進行相關(guān)的處理操作。
    其中,登錄校驗憑證接口(在開發(fā)者服務(wù)器中調(diào)用,小程序中無法使用此接口)為:

     https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
    
       appid          小程序唯一標識
       secret         小程序的 app secret
       js_code        是wx.login登錄時獲取的憑證code
       grant_type     填寫為 authorization_code
    

    具體偽代碼如下:

/**
 * 我把這一步封裝成一個函數(shù),以后再調(diào)用那些需要登錄后才有權(quán)限訪問的后臺服務(wù)時.
 * 可以使用使用這個函數(shù)操作,基本邏輯,還可以進行擴展
 * @url      : 開發(fā)者服務(wù)器登錄服務(wù)接口 可設(shè)置默認值
 * @key      : 存入本地緩存的第三方自定義登錄session的鍵值
 * @callback : 需要用到登錄服務(wù)的回調(diào)函數(shù)(或函數(shù)集合)
 */
function  Login(key,url,callback){
     // 首先使用wx.login獲取登錄憑證code并發(fā)送給開發(fā)者服務(wù)器
     wx.login({
      success: function(res) {
        if (res.code) {
          //發(fā)送code給開發(fā)者服務(wù)器以獲取session_key和openid
          wx.request({
            url:url,
            data: {
              code: res.code
            },
            //發(fā)送至開發(fā)者服務(wù)器成功
            success: function(res) {
                //開發(fā)者服務(wù)器獲得session_key和openid成功并返回了
                //第三方自定義session或者解密數(shù)據(jù)等json格式數(shù)據(jù)res給客戶端
                if(res.has3rdSession){
                    //登錄成功,將第三方session存入本地緩存
                    console.log("登錄成功")
                    wx.setStorageSync(key,res.3rdSession)
                    //設(shè)置登錄標識為true
                    this.setData{
                        flag:true
                    }
                    //進行后續(xù)回調(diào)處理
                    callback(res)
                    ....
                }
                else{
                    //沒有返回第三方自定義session,登錄失敗
                    console.log("登錄失敗")
                    ....
                }
            }
          })
        } else {
          //沒有獲取到登錄憑證code,登錄失敗
          console.log('登錄失敗!' + res.errMsg)
          ....
        }
      }
    })
}
  • 非首次登錄

    wx.getStorageSync()查詢本地緩存中是否有我們自定義的session登錄態(tài)信息,有的話證明不是第一次登錄,此時先查詢微信接口服務(wù)器上的用戶session_key是否過期,如果過期了,不管我們自己定義的session如何,都要重新登錄,設(shè)置登錄標識flag為false;如果沒有過期,那么可以向開發(fā)者服務(wù)器發(fā)送sessio查詢用戶信息,如果開發(fā)者服務(wù)器告訴我們自己定義的session過期了,那重新登錄,設(shè)置登錄標識flag為false,如果沒有過期,則查詢是否有這個session來獲得用戶的相關(guān)信息,具體偽代碼如下:

/**
 - 我把這一步封裝成一個函數(shù),以后再調(diào)用那些需要登錄后才有權(quán)限訪問的后臺服務(wù)時.
 - 可以使用使用這個函數(shù)操作,基本邏輯,還可以進行擴展
 - @url      : 開發(fā)者服務(wù)器服務(wù)接口
 - @key      : 自己定義的session存儲在本地緩存中的鍵名
 - @callback : 需要用到登錄服務(wù)的回調(diào)函數(shù)(或函數(shù)集合)
 - @others   : 其他需要用到的數(shù)據(jù)等參數(shù)
 */
function doRequestWithSession(key,url,callback,others)
{
    try {
      var value = wx.getStorageSync(key)
      if (value) {
          // 存在自定義登錄session,非首次登錄
          // 查詢 用戶密鑰session_key是否過期
          wx.checkSession({
              success: function(){
                //session_key 未過期,并且在本生命周期一直有效
                //向開發(fā)者服務(wù)器發(fā)送自定義session查詢用戶信息
                wx.request({
                      url: url, 
                      data: value,  //本地緩存的自定義Session值 可以加上其他需要的數(shù)據(jù)others等
                      success: function(res) {
                         if(res.hasSession){
                            //查詢成功,開發(fā)者服務(wù)器上有我們自定義的session
                            //根據(jù)返回結(jié)果進行對應(yīng)的操作,先判斷session是否過期
                            //如果我們自定義的session已經(jīng)過期
                            if(res.expired){
                                console.log("session過期,重新登錄")
                                //設(shè)置登錄標識為false
                                this.setData{
                                    flag:false
                                }
                                wx.login() //重新登錄 或者 返回錯誤碼
                                ....
                            }
                            else{
                            //沒有過期,返回的結(jié)果則可以是用戶的相關(guān)信息
                            //進行相關(guān)操作 登錄成功
                               console.log("歡迎回來")
                               callback(res)
                               ....  
                            }    
                          }
                          else
                          {
                              //開發(fā)者服務(wù)器上沒有我們自定義的session,重新登錄
                              console.log("無此session,重新登錄")
                              //設(shè)置登錄標識為false
                                this.setData{
                                    flag:false
                                }
                              wx.login() //重新登錄 或者 返回錯誤碼
                              ....
                          }             
                      }
                })
              },
              fail: function(){
                // session_key 已經(jīng)失效,需要重新執(zhí)行登錄流程
                //設(shè)置登錄標識為false
                this.setData{
                    flag:false
                }
                wx.login() //重新登錄 或者 返回錯誤碼
                ....
              }
          })    
      }
      else{
          //本地緩存中沒有自定義的session登錄態(tài)信息,則進行首次登錄或者后續(xù)處理
          //設(shè)置登錄標識為false
          this.setData{
             flag:false
          }
          wx.login() //登錄 或者 返回錯誤碼
          ....
      }
    } catch (e) {
      // 異常處理
      ....
    }
 }
  • 條件判斷登錄
    需要用到登錄權(quán)限的服務(wù)時,可以使用條件判斷
    偽代碼:
if(this.data.flag){
    //已經(jīng)登錄過,非首次登錄
    doRequestWithSession(key,url,callback,others)
    ....
}
else{
    //沒有登錄過,可以進一步檢查本地緩存是否有3rdSession
    do other things
    ....
}

3.獲取安全的原始數(shù)據(jù)

在第一部分已經(jīng)說過敏感數(shù)據(jù)和開放數(shù)據(jù),可以用 wx.getUserInfo獲得開放數(shù)據(jù),但是沒有登錄獲取解密密鑰session_key是無法解密敏感數(shù)據(jù)的,所以開放數(shù)據(jù)中,沒有登錄的話,我們只能獲得用戶昵稱、頭像、城市、性別、國籍等,并沒有可以標識用戶的唯一id。所以如何拿到我們的安全的原始數(shù)據(jù),只有:獲取開放數(shù)據(jù)——>獲得登錄權(quán)限,開發(fā)者服務(wù)器獲得密鑰session_key校驗簽名解密數(shù)據(jù)——>返回解密數(shù)據(jù),包含有openid。偽代碼:

a.wxml 文件:

//wx.getUserInfo接口有調(diào)整,使用該接口將不再出現(xiàn)授權(quán)彈窗,要使用 <button>組件引導(dǎo)用戶主動進行授權(quán)操作,使用此接口要注意:
//當用戶未授權(quán)過,調(diào)用該接口將直接報錯;當用戶授權(quán)過,可以使用該接口獲取用戶信息
//例子
<button open-type='getUserInfo' bindgetuserinfo='showUserInfo'>登錄</button>

a.js 文件:

Page({
  data:{},
  ...
  //點擊登錄按鈕后觸發(fā)
  showUserInfo:function(e){
    //獲取需要解密的數(shù)據(jù)
    var encryptedData = e.detail.encryptedData
    /*
    *@key      第三方自定義登錄session存在本地緩存的key值
    *@url      解密敏感數(shù)據(jù)的開發(fā)者服務(wù)器服務(wù)接口
    *@callback 獲得解密數(shù)據(jù)后的回調(diào)函數(shù)
    *@encryptedData 當前獲得的未解密數(shù)據(jù)
    */
    doRequestWithSession(key,url,callback,encryptedData)   
  },
})

4.后臺

后臺的服務(wù)有很多,可以做API平臺進行統(tǒng)一管理:

  1. 登錄接口 :domain/api/login
  2. 驗證簽名解密接口 :domain/api/decrypt
  3. 其他

其中的解密代碼示例 (官方4種語言版本:Python、php、c++、node):

<?php 
class WXBizDataCrypt
{
    private $appid;
    private $sessionKey;

    /**
     * 構(gòu)造函數(shù)
     * @param $sessionKey string 用戶在小程序登錄后獲取的會話密鑰
     * @param $appid string 小程序的appid
     */
    public function __construct( $appid, $sessionKey)
    {
        $this->sessionKey = $sessionKey;
        $this->appid = $appid;
    }


    /**
     * 檢驗數(shù)據(jù)的真實性,并且獲取解密后的明文.
     * @param $encryptedData string 加密的用戶數(shù)據(jù)
     * @param $iv string 與用戶數(shù)據(jù)一同返回的初始向量
     * @param $data string 解密后的原文
     *
     * @return int 成功0,失敗返回對應(yīng)的錯誤碼
     */
    public function decryptData( $encryptedData, $iv, &$data )
    {
        if (strlen($this->sessionKey) != 24) {
            return ErrorCode::$IllegalAesKey;
        }
        $aesKey=base64_decode($this->sessionKey);

        
        if (strlen($iv) != 24) {
            return ErrorCode::$IllegalIv;
        }
        $aesIV=base64_decode($iv);

        $aesCipher=base64_decode($encryptedData);

        $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

        $dataObj=json_decode( $result );
        if( $dataObj  == NULL )
        {
            return ErrorCode::$IllegalBuffer;
        }
        if( $dataObj->watermark->appid != $this->appid )
        {
            return ErrorCode::$IllegalBuffer;
        }
        $data = $result;
        return ErrorCode::$OK;
    }

}

$appid = 'wx4f4bc4dec97d474b';
$sessionKey = 'tiihtNczf5v6AKRyjwEUhQ==';

$encryptedData="CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM
                QmRzooG2xrDcvSnxIMXFufNstNGTyaGS
                9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+
                3hVbJSRgv+4lGOETKUQz6OYStslQ142d
                NCuabNPGBzlooOmB231qMM85d2/fV6Ch
                evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6
                /1Xx1COxFvrc2d7UL/lmHInNlxuacJXw
                u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn
                /Hz7saL8xz+W//FRAUid1OksQaQx4CMs
                8LOddcQhULW4ucetDf96JcR3g0gfRK4P
                C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB
                6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns
                /8wR2SiRS7MNACwTyrGvt9ts8p12PKFd
                lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV
                oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG
                20f0a04COwfneQAGGwd5oa+T8yO5hzuy
                Db/XcxxmK01EpqOyuxINew==";

$iv = 'r7BXXKkLb8qrSNn05n0qiA==';

$pc = new WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );

if ($errCode == 0) {
    print($data . "\n");
} else {
    print($errCode . "\n");
}
?>

電話咨詢 預(yù)約演示 0元開店
主站蜘蛛池模板: 中文乱码人妻一区二区三区视频|亚洲高清专区|中文毛片无遮挡高潮免费|黄人成=a动漫片免费网站|99re在线免费|女乱淫免费看视频大黄 | 国产精品第一页在线播放|久久精品人人人人人人|亚洲精品一区久久久久一品=aV|欧美7777|美女全身赤裸裸免费网站|在线视频三区 | 免费一区二区|在线看你懂得|国产高清在线喷奶水|国产精品国产精品国产专区不片|亚洲精品久久无码=av片动漫网站|亚洲精品9999久久久久 | 澳门成免费crm大全|日韩在线精品成人=aV|精品国产一区二区三区成人影院|日韩=av中文无码影院|久久最新金品视频免费播放|国产精品1卡2卡3卡4卡 | 好吊妞在线新免费视频|精品一区二区在线播放|久久=av片免费一区二区三区|无码少妇一区二区|中文=av字幕一区|国产精品久久国产精品99盘 | 国产成人=av一区|日本大片免=a费观看视频老师|在线观看高清视频|一机毛片|久久九九兔免费精品6|久久爽精品区穿丝袜 | 国产人妖在线|国产午夜福利在线播放|亚洲国产成人精品久久久国产成人|高柳の肉嫁动漫在线播放|日韩久久精品一区二区三区|精品偷自拍另类在线观看 | 秋霞国产精品一区二区|无遮无挡非常色的视频免费|日韩不卡一卡二卡3卡四卡网站|在线高清国语成人网站|2020天天干夜夜爽|国产99视频精品免费专区 | 国产亚洲精=a=a在线看|玖玖在线观看视频|国产免费内射又粗又爽密桃视频|久久99精品国产麻豆蜜芽|人妻无码一区二区视频|久久99精品久久水蜜桃 | 成人一区在线视频|成人一区二区在线播放|新婚少妇毛茸茸的性|永久免费黄色大片|欧美精品一区在线观看|国产情侣久久久久=aⅤ免费 | 日韩=av在线中文|三年片在线观看大全中国|日韩视频在线观看中文字幕|91在线看免费|免费人成在线观看视频无码|一个人看的视频www在线观看 | 午夜免费啪视频在线体验区|亚洲成本人片无码免费|亚洲=av成人无码网站色优|自拍偷拍第1页|久久精品性一区区裸体艺术|久久久久亚洲=av成人动图 | 苏畅在麻花传媒的代表作品|亚洲第一久久久|九色91福利|欧美一级网址|456欧美成人免费视频|亚洲狠狠干 | 成人福利小视频|日韩福利视频|强伦姧人妻三上悠亚中文字幕|国产三级无码内射在线看|#NAME?|日日夜夜精品免费 | 蜜桃=aV少妇久久久久久高潮不断|国产精品VIDEOSSEX国产高清|亚洲成=aⅤ人片久青草影院按摩|夜色香影院|自拍视频区|超碰综合 | 超碰在线进入|一级全黄少妇免费录像片|欧美大成色WWW永久网站婷|免费看=a=a=a=a=a级淫片涩爱=av|亚洲=av成人一区二区三区在线观看|99一级片 | 久久久久久久久久久免费视频|亚洲国内在线|亚洲色欧美|久久久区|亚洲精品国产精品成人不卡|#NAME? | 羞羞涩涩网站|亚洲高清免费看|色爱天堂|国产一级无码片在线观看免费|91=av视频观看|推川悠里在线观看=av影片 | 夜夜夜夜操18岁|c=aoporm超碰国产精品|扒开腿挺进湿润的花苞hd视频|激情三区|性bbwbbw日|爱爱免费视频 | 免费人妻无码=aV老色鬼|99爱影视|2018天天躁夜夜躁狠狠躁|#NAME?|91精品免费在线视频|国产免费二区 | 性夜夜春夜夜爽=a=a片=a|欧美激情在线观看视频免费的|女人16一级毛片|日韩精品视频在线观看一区二区|欧美亚洲国产成人|hhh在线观看 | 伊人偷拍视频|久久久久99精品成人片三人毛片|午夜影院中文字幕|J=aP=aNESE国产中文在线观看|久久国产精品福利二区三区|yy8090新视觉午夜毛片 | 久久国产福利一区二区|一本色道久久88精品综合|亚洲学生妹高清=av|WWW亚洲色大成网络|免费在线观看成人=av|亚洲天堂资源在线 | 成本人片在线观看免费网站|成年人视频网站在线|夜趣福利视频|免费观看的=av在线播放|亚洲欧美偷国产日韩|四虎.com | 77777五月色婷婷丁香视频|亚洲精品国产偷五月丁香小说|国产一级黄色大片|亚洲成色777777在线观看影院|四虎成人网|四虎院影亚洲永久 | 50岁退休熟女露脸高潮|欧美高潮喷水高潮集合|久久久久久久综合|国产视频四区|99麻豆久久久国产精品免费优播|久99久在线 | 伊人偷拍视频|久久久久99精品成人片三人毛片|午夜影院中文字幕|J=aP=aNESE国产中文在线观看|久久国产精品福利二区三区|yy8090新视觉午夜毛片 | 一区二区三区四区不卡|成人欧美一区二区三区|欧美=adc影院|中文字幕91在线|色四月婷婷|最新国产=aⅴ精品无码 | 偷欢人妻HD三级中文|不卡一区在线观看|午夜激情视频在线|eeuss国产一区二区三区|日本大尺码专区mv|久久免费小视频 | zzijzzij亚洲日本少妇jizjiz|日韩精品在线视频播放|欧美亚洲黄色片|99久久国产福利自产拍|日韩人妻潮喷中文在线视频|亚洲精品字幕在线观看 | 伊人偷拍视频|久久久久99精品成人片三人毛片|午夜影院中文字幕|J=aP=aNESE国产中文在线观看|久久国产精品福利二区三区|yy8090新视觉午夜毛片 | 亚洲综合自拍|国产一区二区三区久久|亚洲男人第一=aV网站|精品黄网|成年免费视频|欧美三个奶波霸 | 亚洲免费不卡视频|国精产品一品二品国精品69XX|欧美色p|国产成人黄色网址|国产成人无码免费看片软件|欧美一二区在线观看 | 亚洲精品视频网址|新91网|国产乱人伦偷精品视频色欲|猫咪=av官网|可以免费看的毛片|91国产视频在线 | 蜜臀=aⅴ国产精品久久久国产老师|中文在线一区二区三区|小宝极品内射国产在线|#NAME?|影音先锋啪啪=aV资源网站|国产精品久久久久网站 | 久久亚色|久99久精品免费视频热|欧美人伦禁忌DVD放荡欲情|幻女free性俄罗斯毛片|国产精品一区二区三区免费观看|亚洲精品乱码久久久久久中文字幕 | 午夜dj福利|免费看黄在线观看|天堂=a在线|亚洲中文字幕人成影院|亚洲精品久久久久77777|天天躁夜夜踩很很踩2022 | 色妹子影院|国产福利在线永久视频|国产精品日韩精品|天堂在线99香蕉在线视频|日本欧美一区二区免费不卡|少妇人妻在线无码天堂视频网 | 日韩小视频网站hq|免费观看视频的网站视频|色情无码WWW视频无码区|国产精=av|国产人妻无码一区二区三区不卡|色我综合 | 50岁退休熟女露脸高潮|欧美高潮喷水高潮集合|久久久久久久综合|国产视频四区|99麻豆久久久国产精品免费优播|久99久在线 | 99视屏|亚洲精品日韩专区|欧美一级国产|久久丫不卡人妻内射中出|欧美日韩另类综合|亚洲色无码=a片中文字幕 |