精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

手寫一個仿微信登錄的Nodejs程序

網絡 通信技術
本篇教你手寫一個仿微信登錄的Nodejs程序,希望對你有所幫助。

[[357291]]

 前言

首先,我們看一下微信開放文檔中的一張圖:

上面的一幅圖中清楚地介紹了微信登錄整個過程,下面對圖上所示進行總結:

一、二維碼的獲得

  1. 用戶打開登錄網頁后,登錄網頁后臺根據微信OAuth2.0協議向微信開發平臺請求授權登錄,并傳遞事先在微信開發平臺中審核通過的AppID和AppSecrect等參數;
  2. 微信開發平臺對AppID等參數進行驗證,并向登錄網頁后臺返回二維碼;
  3. 登錄網頁后臺將二維碼傳送至前臺進行顯示;

二、微信客戶端授權登錄

  1. 用戶使用微信客戶端掃描二維碼并授權登錄;
  2. 微信客戶端將二維碼特定的uid與微信賬號綁定,傳送至微信開發平臺;
  3. 微信開發平臺驗證綁定數據,調用登錄網頁后臺的回調接口,發送授權臨時票據code;

三、網頁后臺請求數據

  1. 登錄網頁后臺接收到code,表明微信開發平臺同意數據請求;
  2. 登錄網頁后臺根據code參數,再加上AppID和AppSecret請求微信開發平臺換取access_token;
  3. 微信開發平臺驗證參數,并返回access_token;
  4. 登錄網頁后臺收到access_token后即可進行參數分析獲得用戶賬號數據。

實現

了解了大致原理之后,我們就開始簡單實現這個邏輯。因為沒有直接調用微信開發平臺,所以這里只是演示效果。你也可以通過訪問:

  1. https://www.maomin.club/qrcodelogin/ 

這個我的線上網址體驗一下。以下代碼是主要邏輯,結合線上網址體驗更容易理解。

  1. let http = require("http"); 
  2. let express = require("express"); 
  3. let qrcode = require("qr-image"); 
  4. let app = express(); 
  5. let path = require("path"); 
  6. let server = http.createServer(app); 
  7. let url = require("url"); 
  8. let fs = require("fs"); 
  9. let UUID = require("uuid-js"); 
  10. let generateHTML = null
  11.  
  12. app.use(express.static("./public")); 
  13.  
  14. /* 
  15.  * Description: 讀取網頁文件,用于替換關鍵字,相當于簡易模板 
  16.  * Params: 
  17.  * sessionID - 生成的uid 
  18.  * req - 網頁請求 
  19.  * res - 網頁應答 
  20.  * fileName - 網頁文件所在路徑 
  21.  */ 
  22. generateHTML = function (sessionID, req, res, fileName) { 
  23.   fs.readFile(fileName, "UTF-8"function (err, data) { 
  24.     if (!err) { 
  25.       data = data.replace(/SESSION_UID/g, sessionID); 
  26.       res.writeHead(200, { 
  27.         "Content-Type""text/html; charset=UTF-8"
  28.       }); 
  29.       res.end(data); 
  30.     } else { 
  31.       console.log(err); 
  32.  
  33.       res.writeHead(404, { 
  34.         "Content-Type""text/html; charset=UTF-8"
  35.       }); 
  36.       res.end(); 
  37.     } 
  38.   }); 
  39. }; 
  40.  
  41. /* 
  42.  * Description: 寫入JSON文件 
  43.  * Params: 
  44.  * fileName - JSON文件所在路徑 
  45.  * uid - 生成的uid 
  46.  * writeData - 需要寫入的JSON格式數據 
  47.  * 
  48.  */ 
  49. let setJSONValue = function (fileName, uid, writeData) { 
  50.   let data = fs.readFileSync(fileName); 
  51.  
  52.   let users = JSON.parse(data.toString()); 
  53.   let addFlag = true
  54.   let delFlag = writeData === null
  55.  
  56.   for (let i = 0; i < users.data.length; i++) { 
  57.     if (users.data[i].uid === uid) { 
  58.       addFlag = false
  59.  
  60.       if (delFlag) { 
  61.         users.data.splice(i, 1); 
  62.       } else { 
  63.         users.data[i].status = writeData.status; 
  64.  
  65.         console.log( 
  66.           "writeJSON: " + JSON.stringify(users.data[i]) + " modified." 
  67.         ); 
  68.       } 
  69.     } 
  70.   } 
  71.  
  72.   if (addFlag) { 
  73.     users.data.push(writeData); 
  74.     console.log("writeJSON: " + JSON.stringify(writeData) + " inserted."); 
  75.   } 
  76.  
  77.   // 同步寫入文件 
  78.   let writeJSON = JSON.stringify(users); 
  79.   fs.writeFileSync(fileName, writeJSON); 
  80. }; 
  81.  
  82. /* 
  83.  * Description: 讀取JSON文件(要返回數據,選擇同步讀取) 
  84.  * Params: 
  85.  * fileName - JSON文件所在路徑 
  86.  * uid - 生成的uid 
  87.  * 
  88.  */ 
  89. getJSONValue = function (fileName, uid) { 
  90.   let readData = null
  91.  
  92.   // 同步讀取文件 
  93.   let data = fs.readFileSync(fileName); 
  94.  
  95.   let users = JSON.parse(data.toString()); 
  96.  
  97.   for (let i = 0; i < users.data.length; i++) { 
  98.     if (users.data[i].uid === uid) { 
  99.       readData = JSON.stringify(users.data[i]); 
  100.       break; 
  101.     } 
  102.   } 
  103.  
  104.   return readData; 
  105. }; 
  106.  
  107. // 顯示網站首頁 
  108. app.get("/"function (req, res) { 
  109.   // 生成唯一的ID 
  110.   let uid = UUID.create(); 
  111.   console.log("uid: '" + uid + "' generated."); 
  112.   // 替換網頁模板內的UID關鍵字 
  113.   generateHTML(uid, req, res, path.join(__dirname, "/views/main.html")); 
  114. }); 
  115.  
  116. // 生成二維碼圖片并顯示 
  117. app.get("/qrcode"function (req, res, next) { 
  118.   let uid = url.parse(req.url, true).query.uid; 
  119.  
  120.   try { 
  121.     if (typeof uid !== "undefined") { 
  122.       // 寫入二維碼內的網址,微信掃描后自動跳轉。下面的網址是我的網址,https://www.maomin.club/qrcodelogin ,你可以換成自己的線上網址或者本地服務器。加上后面的"/scanned?uid=" 
  123.       let jumpURL = "https://www.maomin.club/qrcodelogin/scanned?uid=" + uid; 
  124.       // 生成二維碼(size:圖片大小, margin: 邊框留白) 
  125.       let img = qrcode.image(jumpURL, { size: 6, margin: 2 }); 
  126.       res.writeHead(200, { "Content-Type""image/png" }); 
  127.       img.pipe(res); 
  128.     } else { 
  129.       res.writeHead(414, { "Content-Type""text/html" }); 
  130.       res.end("<h1>414 Request-URI Too Large</h1>"); 
  131.     } 
  132.   } catch (e) { 
  133.     res.writeHead(414, { "Content-Type""text/html" }); 
  134.     res.end("<h1>414 Request-URI Too Large</h1>"); 
  135.   } 
  136. }); 
  137.  
  138. // 顯示手機掃描后的確認界面 
  139. app.get("/scanned"function (req, res) { 
  140.   let uid = url.parse(req.url, true).query.uid; 
  141.  
  142.   if (typeof uid !== "undefined") { 
  143.     generateHTML(uid, req, res, path.join(__dirname, "/views/confirm.html")); 
  144.  
  145.     console.log("uid: '" + uid + "' scanned."); 
  146.  
  147.     // 獲取JSON文件內對應uid的數據,更改其數據狀態 
  148.     let jsonData = getJSONValue(path.join(__dirname, "/bin/data.json"), uid); 
  149.  
  150.     if (jsonData === null) { 
  151.       jsonData = { 
  152.         uid: uid, 
  153.         status: "scanned"
  154.         name"USER"
  155.       }; 
  156.     } else { 
  157.       jsonData = JSON.parse(jsonData); 
  158.       jsonData.status = "scanned"
  159.     } 
  160.  
  161.     // 寫入JSON文件 
  162.     setJSONValue(path.join(__dirname, "/bin/data.json"), uid, jsonData); 
  163.   } else { 
  164.     res.writeHead(414, { "Content-Type""text/html" }); 
  165.     res.end("<h1>414 Request-URI Too Large</h1>"); 
  166.   } 
  167. }); 
  168.  
  169. // 在確認界面操作的響應 
  170. app.get("/confirmed"function (req, res) { 
  171.   let uid = url.parse(req.url, true).query.uid; 
  172.   let operate = url.parse(req.url, true).query.operate; 
  173.  
  174.   if (typeof uid !== "undefined") { 
  175.     console.log("uid: '" + uid + "' " + operate); 
  176.  
  177.     let jsonData = getJSONValue(path.join(__dirname, "/bin/data.json"), uid); 
  178.     let status = operate === "confirm" ? "verified" : "canceled"
  179.  
  180.     if (jsonData === null) { 
  181.       jsonData = { 
  182.         uid: uid, 
  183.         status: status, 
  184.         name"USER"
  185.       }; 
  186.     } else { 
  187.       jsonData = JSON.parse(jsonData); 
  188.       jsonData.status = status; 
  189.     } 
  190.  
  191.     setJSONValue(path.join(__dirname, "/bin/data.json"), uid, jsonData); 
  192.  
  193.     if (status === "verified") { 
  194.       res.writeHead(200, { "Content-Type""text/html" }); 
  195.       res.end("<h1 style='textAlign:center;'>登錄成功!</h1>"); 
  196.     } else { 
  197.       res.writeHead(200, { "Content-Type""text/html" }); 
  198.       res.end("<h1 style='textAlign:center;'>Canceled!</h1>"); 
  199.     } 
  200.   } else { 
  201.     res.writeHead(414, { "Content-Type""text/html" }); 
  202.     res.end("<h1 style='textAlign:center;'>414 Request-URI Too Large</h1>"); 
  203.   } 
  204. }); 
  205.  
  206. // 響應主頁不斷的AJAX請求 
  207. app.get("/verified"function (req, res) { 
  208.   let uid = url.parse(req.url, true).query.uid; 
  209.  
  210.   // normal   - 沒有任何觸發 
  211.   // scanned  - 已掃描 
  212.   // canceled - 已取消 
  213.   // verified - 已驗證 
  214.   let dataStatus = { 
  215.     cmd: "normal"
  216.     user""
  217.   }; 
  218.  
  219.   console.log("uid: '" + uid + "' query ..."); 
  220.  
  221.   if (typeof uid !== "undefined") { 
  222.     let userData = getJSONValue(path.join(__dirname, "/bin/data.json"), uid); 
  223.  
  224.     // 返回JSON數據用于首頁AJAX操作 
  225.     if (userData !== null) { 
  226.       userData = JSON.parse(userData); 
  227.       dataStatus.cmd = userData.status; 
  228.       dataStatus.user = userData.name
  229.     } 
  230.   } 
  231.  
  232.   res.end(JSON.stringify(dataStatus)); 
  233. }); 
  234.  
  235. server.listen(4000); 
  236. console.log( 
  237.   "Express server listening on port %d in %s mode"
  238.   server.address().port, 
  239.   app.settings.env 
  240. ); 

看到這里,你是不是覺得代碼不夠全,咋就給了一個主要邏輯代碼,別著急,代碼滿漢全席馬上奉上,代碼解釋可以看注釋哦!以下是github網址,如果覺得對自己有用,歡迎star~

  1. https://github.com/maomincoding/qrcodelogin.git 

結語

看到這里了,你可能直接拉取代碼,發現項目咋運行不了呢?效果也不跟線上網址那樣。是這樣的,如果你有線上服務器,可以把它部署到云端。如果沒有線上服務器,你可以自己搭建一個本地局域網服務器。一定要保證手機跟電腦網頁在一個IP網段上。

效果圖如下:

登錄網頁


登錄授權頁


 

責任編輯:姜華 來源: 前端歷劫之路
相關推薦

2016-09-30 09:22:55

2012-12-24 13:25:59

微信App

2019-03-19 19:19:19

Facebook微信轉型

2015-09-22 10:43:37

微信雷達

2013-04-01 13:15:49

微信微信公眾賬號微信推廣

2016-02-15 11:47:54

微信源碼下拉視頻

2015-08-07 15:39:26

仿微信語音界面源碼

2022-03-09 09:43:01

工具類線程項目

2021-02-22 17:17:38

Proxy緩存代碼

2022-10-31 08:27:53

Database數據數據庫

2021-10-26 00:25:14

程序登錄流程

2021-03-04 11:50:48

微信Spring Secu登錄

2021-01-29 18:02:52

企業微信私域流量

2021-03-18 08:04:54

AQS工具CAS

2021-12-07 06:55:17

節流函數Throttle

2020-11-02 08:19:18

RPC框架Java

2013-08-20 15:22:47

2025-09-29 03:15:00

微信AI客戶營銷

2013-08-19 15:00:53

微信易信

2022-01-26 15:20:00

配置微服務架構
點贊
收藏

51CTO技術棧公眾號

狠狠干视频网站| 成人精品久久一区二区三区| 中文字幕高清视频| 日本综合视频| 亚洲美女区一区| 精品日本一区二区三区| 日本三级一区二区三区| 欧美在线网站| 国产亚洲精品久久久| 欧美色图校园春色| 亚洲1234区| 一级做a爱片久久| 日韩精品久久久免费观看| www精品国产| 日本在线播放一区二区三区| 久久99精品视频一区97 | 亚洲最大色综合成人av| 国产精品你懂得| 国产草草浮力影院| 91亚洲精品| 亚洲成人精品一区二区| 日韩欧美精品在线不卡| 亚洲国产精品久久人人爱潘金莲| 日一区二区三区| 欧美福利视频在线| 亚洲欧美另类日本| 在线观看欧美理论a影院| 日韩一区二区三区视频| 在线观看的毛片| 日韩精品极品| 亚洲国产sm捆绑调教视频| 一卡二卡3卡四卡高清精品视频| 天天摸天天碰天天爽天天弄| 国产大陆a不卡| 成人信息集中地欧美| 欧美男人天堂网| 日韩毛片免费观看| 国产精品91一区二区| 国产精品va在线| 国产成人免费看| 99视频精品| 欧美极品少妇xxxxⅹ喷水| 国产免费美女视频| 欧美一二区在线观看| 亚洲深夜福利视频| 精品无码一区二区三区 | 欧美一区不卡| 日韩一区二区福利| 欧美性猛交xxxx乱大交少妇| 精品一区二区三区在线| 亚洲色图50p| 精品无码人妻一区| 国产va免费精品观看精品视频| 亚洲高清一区二| 国产精品久久久久久久无码| avtt综合网| 日韩高清a**址| 丰满少妇一区二区三区| 嫩草一区二区三区| 亚洲男人天堂2023| 男人的天堂官网 | 亚洲乱码一区二区| 国产又爽又黄无码无遮挡在线观看 | 午夜精品久久久久久久| 精品人妻一区二区三区四区在线| 最新欧美色图| 欧美亚洲日本国产| 尤物国产在线观看| 精品一区二区三区中文字幕在线| 91精品国产福利在线观看 | 亚洲午夜无码久久久久| 毛片不卡一区二区| 国产欧美在线看| 精品久久久无码中文字幕| 成人av在线一区二区三区| 久久99精品久久久久久久久久| 欧美人体大胆444www| 国产欧美一区二区精品仙草咪 | 亚洲欧美视频一区二区| 亚洲三级久久久| 国产日韩欧美大片| 免费影视亚洲| 一本大道久久精品懂色aⅴ| 亚洲欧美在线精品| 日本精品视频| 亚洲精品色婷婷福利天堂| 免费成人深夜天涯网站| 亚洲午夜精品一区 二区 三区| 久久久久久久成人| 亚洲毛片一区二区三区| 国产一区中文字幕| 九色一区二区| 九色porny丨首页在线| 亚洲国产欧美一区二区三区丁香婷| 成人毛片视频网站| 欧美激情福利| 亚洲精品动漫100p| 亚洲欧美卡通动漫| 国产欧美成人| 成人国产精品久久久| 日本精品久久久久| 1000精品久久久久久久久| www.好吊操| 精品123区| 亚洲精品久久久久中文字幕二区 | 少妇丰满尤物大尺度写真| 日韩母乳在线| 久久亚洲影音av资源网| 日本中文字幕久久| 大桥未久av一区二区三区中文| 视频一区二区三区在线观看| 91超碰在线| 制服丝袜成人动漫| 免费一级做a爰片久久毛片潮| 狠狠入ady亚洲精品经典电影| 国产精品极品在线| 天天操天天舔天天干| 亚洲欧美日韩一区二区三区在线观看| 美女福利视频在线| 国产精品对白久久久久粗| 最新国产精品拍自在线播放| 亚欧视频在线观看| 国产精品一品二品| 一本色道婷婷久久欧美| 免费福利视频一区二区三区| 亚洲精品在线免费播放| 加勒比婷婷色综合久久| 捆绑调教一区二区三区| 日本成人三级| 亚洲女同志freevdieo| 精品乱人伦小说| 在线观看成人毛片| 国产在线精品一区在线观看麻豆| 日韩电影天堂视频一区二区| 忘忧草在线影院两性视频| 精品成人在线观看| 久草中文在线视频| 国产福利91精品一区二区三区| 一区二区三区不卡在线| 九七影院97影院理论片久久| 亚洲免费小视频| 亚洲天堂男人av| 久久久精品影视| 免费日韩视频在线观看| 蜜桃tv一区二区三区| 91成人国产在线观看| 四虎永久在线观看| 欧美日韩美女在线| 女尊高h男高潮呻吟| 在线综合视频| 久久偷窥视频| 视频二区不卡| 中文字幕欧美国内| 伊人网视频在线| 成人免费一区二区三区视频| 亚洲成人手机在线观看| 亚洲综合专区| 成人欧美一区二区| av人人综合网| 亚洲毛片在线观看| 99成人精品视频| 自拍偷拍国产亚洲| 韩国三级与黑人| 在线国产精品一区| 美媛馆国产精品一区二区| 性感美女一区二区在线观看| 日韩性xxxx爱| 亚洲风情第一页| 午夜一区二区三区在线观看| 好吊日免费视频| 欧美aaaaa成人免费观看视频| 一区二区视频在线播放| 成人自拍视频| 久久久久久伊人| 国模精品一区二区| 欧美妇女性影城| 久久精品这里有| 国产亚洲精品资源在线26u| 视色视频在线观看| 黄色成人在线网站| 欧美午夜免费| 不卡精品视频| 91成人精品网站| 老司机在线永久免费观看| 精品久久一区二区三区| 欧美精品一二三四区| 中文字幕一区在线| 老熟女高潮一区二区三区| 久久久水蜜桃av免费网站| 在线丝袜欧美日韩制服| 全国精品免费看| 成人精品视频99在线观看免费| 爱情岛论坛亚洲品质自拍视频网站 | 成年人网站av| 免费在线成人| 国产经典久久久| japanese国产精品| 国新精品乱码一区二区三区18 | 97超级碰碰| 高清av一区| 国模视频一区二区三区| 一本一道波多野毛片中文在线| 亚洲大尺度美女在线| 国产一区二区三区中文字幕| 精品国产鲁一鲁一区二区张丽 | 国产高清免费在线播放| 精品成人一区二区三区| 一级日韩一级欧美| 色偷偷88欧美精品久久久| 麻豆chinese极品少妇| 国产精品三级av在线播放| 日韩aaaaa| 国产精品一二三四区| 日韩av片网站| 久久久久综合| 国产日产欧美视频| 国产一区清纯| 日韩欧美一级在线| 三区四区不卡| 日本一区二区三不卡| 久久动漫网址| av一区观看| 精品国产伦一区二区三区观看说明| 国产第一区电影| 亚洲性受xxx喷奶水| 国内精品美女av在线播放| 大片免费在线观看| 丝袜美腿精品国产二区| 国产69久久| 国产一区二区动漫| 欧美日韩在线中文字幕| 日韩精品久久久久久久玫瑰园| 国产欧美日韩成人| 欧美日韩你懂得| 最新在线中文字幕| 欧美在线一二三四区| 日本天堂网在线| 欧美午夜视频一区二区| 日韩免费视频网站| 午夜伊人狠狠久久| 国产精品999在线观看| 精品无吗乱吗av国产爱色| 亚洲少妇视频| 中文字幕精品在线| www黄在线观看| 一区三区二区视频| 浮生影视网在线观看免费| 亚洲欧洲偷拍精品| 激情综合闲人网| 伊人久久免费视频| av资源网站在线观看| 一区二区三区亚洲| 欧美成年黄网站色视频| 久久好看免费视频| 亚洲七七久久综合桃花剧情介绍| 久久伊人色综合| 欧美videossex| 91av视频在线| 日韩av一级| 91精品久久久久久久久久久久久久| 青娱乐极品盛宴一区二区| 成人自拍性视频| 动漫av一区| 欧美日韩精品综合| 日韩欧美精品| 17c丨国产丨精品视频| 亚洲精品孕妇| 国产成人久久婷婷精品流白浆| 日韩av电影免费观看高清完整版| 中文av一区二区三区| 国产麻豆精品theporn| 少妇伦子伦精品无吗| 久久免费国产精品| 殴美一级黄色片| 亚洲综合在线免费观看| 少妇太紧太爽又黄又硬又爽| 欧美四级电影网| 99久久一区二区| 日韩电影免费在线观看中文字幕| 国产香蕉在线| 欧美成人精品一区| 亚洲精品永久免费视频| 成人午夜高潮视频| 麻豆一区二区| 中文字幕日韩精品一区二区| 影音先锋久久| 亚洲xxxx2d动漫1| 成人免费看的视频| 欧美xxxx精品| 亚洲一区日韩精品中文字幕| 日本高清不卡码| 51午夜精品国产| 五月婷婷六月激情| 色先锋资源久久综合5566| 久久香蕉一区| 国产成人精品久久二区二区| 国产亚洲精aa在线看| 久久99欧美| 亚洲中无吗在线| 日韩欧美黄色大片| 成人av在线观| 国产老头老太做爰视频| 精品日韩美女的视频高清| 国产乱码精品一区二三区蜜臂| 日韩电影在线观看中文字幕| 老司机在线视频二区| 日韩av电影在线网| 国产精品x8x8一区二区| 中文字幕一区二区三区在线乱码 | 91人人澡人人爽人人精品| 粉嫩av一区二区三区在线播放 | 国产精品视频播放| 国偷自产视频一区二区久| 国产又爽又黄ai换脸| 美女精品网站| 亚洲av熟女高潮一区二区| 中文字幕一区二区三区不卡 | 青青成人在线| 在线看片一区| 日本一区二区三区在线免费观看| 国产午夜精品一区二区三区四区| 国产网友自拍视频| 日韩一区二区三区三四区视频在线观看| 成人高清免费观看mv| 欧美在线视频观看免费网站| 超碰一区二区三区| 国产女主播av| 激情国产一区二区| 波多野结衣av在线观看| 岛国av午夜精品| 欧美天堂在线视频| 国外成人在线视频| 亚洲乱码一区| 欧美a级免费视频| 国产黄色精品视频| 91狠狠综合久久久| 欧美日韩国产首页在线观看| 二人午夜免费观看在线视频| 日本亚洲欧美成人| 亚洲精品无吗| 男人天堂网视频| 久久久久99精品一区| 无码人妻精品一区二区蜜桃色欲| 亚洲女成人图区| 这里有精品可以观看| 免费国产在线精品一区二区三区| 99视频在线精品国自产拍免费观看| av av在线| 欧美日韩色婷婷| 九色视频在线播放| 国产精品精品久久久| japanese国产精品| 91高清国产视频| 一区二区三区中文在线| www.色呦呦| 91国产中文字幕| 久久av电影| www.久久av.com| 一区二区三区中文在线观看| 天堂成人在线视频| 欧美性在线观看| 欧洲美女日日| 极品粉嫩美女露脸啪啪| 亚洲精品高清在线| 亚洲精品久久久久久久久久 | 高潮毛片又色又爽免费| 亚洲偷熟乱区亚洲香蕉av| 成人国产精品| 亚洲av综合色区| 97久久超碰国产精品| 亚洲欧美偷拍视频| 久久久99免费视频| 精品午夜电影| 亚洲一级免费观看| 一区二区三区中文字幕| 青青草免费在线视频| 国产日韩欧美中文| 黄色日韩精品| 91成年人网站| 欧美一二三区在线观看| xxxcom在线观看| 色综合影院在线观看| 国产精品综合久久| 天天综合网久久综合网| 日日狠狠久久偷偷四色综合免费| 6080成人| 午夜久久久精品| 亚洲高清免费视频| 18视频免费网址在线观看| 国产精品亚洲综合| 日本免费在线视频不卡一不卡二 | 一区三区视频| 国产无遮挡在线观看| 亚洲精品一线二线三线无人区| 无人区在线高清完整免费版 一区二| 潘金莲一级淫片aaaaa免费看| 91视频.com| 国产免费久久久| 国产精品人成电影| 一区二区国产精品|