精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

美足av综合网| 亚洲爆乳无码一区二区三区| 欧美男gay| 欧美日韩国产色站一区二区三区| youjizz.com亚洲| 日韩一区二区三区久久| 丰满熟妇乱又伦| 亚洲精品黄色| 中文字幕亚洲一区二区三区五十路| 日韩av福利在线观看| 国产夫妻在线播放| 中文字幕精品综合| 97免费资源站| japanese国产在线观看| 欧美日韩一区二区三区四区在线观看| 日韩精品电影网| 免费cad大片在线观看| 成人爽a毛片一区二区| 日韩成人精品在线| 亚洲精品国产美女| 亚洲国产精品成人天堂| 在线看av的网址| 菠萝蜜视频在线观看一区| 成人国产精品av| 在线观看亚洲欧美| 精品精品精品| 欧美丰满一区二区免费视频| 凹凸国产熟女精品视频| 在线看女人毛片| 国产精品美日韩| 久久精精品视频| 性一交一乱一精一晶| 麻豆精品一区二区综合av| 97在线视频免费播放| 大吊一区二区三区| 国产精品片aa在线观看| 亚洲精品久久久久中文字幕二区| 91大神免费观看| 全球中文成人在线| 欧美在线一二三四区| 岳毛多又紧做起爽| 国产在线xxx| 亚洲最新视频在线观看| 欧美 另类 交| 女女色综合影院| 国产精品久久久一本精品 | 亚洲天堂男人天堂女人天堂| 国产精品熟妇一区二区三区四区 | 国产精品一码二码三码在线| 国产乱色精品成人免费视频 | 中文字幕1区2区| 99精品国产九九国产精品| 欧美色大人视频| 欧美大尺度做爰床戏| 亚洲伦理影院| a级大片在线观看| 欧美精品电影| 中文字幕精品一区二区三区精品| 欧美激情视频一区二区三区| 久久久.www| 国外成人福利视频| 一本高清dvd不卡在线观看| 色综合久久久久无码专区| а√在线中文在线新版| 亚洲444eee在线观看| www插插插无码视频网站| 日日夜夜天天综合入口| 亚洲国产日韩综合久久精品| 蜜桃视频日韩| 男女网站在线观看| 国产精品一区一区| 97色在线观看免费视频| 国产五月天婷婷| 国产一区二区三区成人欧美日韩在线观看 | 国产精品久久久久久亚洲伦 | 第一页在线观看| 国产精品系列在线| 欧美大片免费播放| 激情网站在线| 日韩欧美中文免费| 天天视频天天爽| 国产一区二区三区| 亚洲高清不卡av| 国产色视频一区二区三区qq号| 久久超碰99| 操91在线视频| 欧美精品亚洲精品日韩精品| 日韩电影网1区2区| 亚洲伊人一本大道中文字幕| 精品成人免费视频| 日韩制服丝袜先锋影音| 成人精品aaaa网站| 农村少妇久久久久久久| 国产欧美一区在线| 奇米777四色影视在线看| 福利影院在线看| 精品视频1区2区| 国产精品一区二区人妻喷水| 欧美日韩播放| 久久久日本电影| 中文字幕人成人乱码亚洲电影| 丁香婷婷综合网| 先锋影音欧美| 91高清视频在线观看| 欧美伊人精品成人久久综合97| 麻豆精品国产传媒| 成人激情电影在线| 午夜精品免费视频| 91高潮大合集爽到抽搐| 91亚洲精品乱码久久久久久蜜桃| 亚洲午夜精品一区二区| 交100部在线观看| 91麻豆精品国产91久久久资源速度| 精品国产av色一区二区深夜久久| 婷婷亚洲最大| 国产91在线播放| 男人天堂av网| 综合av第一页| 黑人粗进入欧美aaaaa| 老牛影视av一区二区在线观看| 日韩在线视频网站| av毛片在线免费观看| 成人性色生活片免费看爆迷你毛片| 亚洲精品一区国产精品| 午夜伦理福利在线| 午夜国产精品一区| 一本之道在线视频| 欧美呦呦网站| 日本三级久久久| 少妇喷水在线观看| 91亚洲国产成人精品一区二区三| 久久大片网站| av午夜在线观看| 欧美电视剧在线看免费| 久久久久亚洲AV成人网人人小说| 日韩欧美网址| 国产精品第100页| 国产在线一在线二| 欧美性猛交xxxx乱大交| 日韩aaaaa| 亚洲麻豆视频| 国产伦精品一区二区三区照片91| 色在线视频网| 欧美不卡123| 无码人妻精品一区二区三区温州| 欧美日韩99| 99se婷婷在线视频观看| 尤物视频在线看| 日韩一区二区中文字幕| 亚洲国产精品久| 国产麻豆欧美日韩一区| 国产 国语对白 露脸| 精品视频成人| 欧美激情久久久久久| 免费黄色av片| 久久久久国产精品麻豆| 久久久久免费精品| 蜜桃精品视频| 欧美疯狂做受xxxx高潮| 亚洲精品久久久狠狠狠爱| 亚洲尤物在线视频观看| 扒开伸进免费视频| 99精品国产99久久久久久福利| 国产亚洲一区二区三区在线播放| 高清av在线| 欧美中文字幕久久| 国产精品一区二区亚洲| 精品系列免费在线观看| 麻豆传媒网站在线观看| 伊色综合久久之综合久久| 欧美国产乱视频| 亚洲 美腿 欧美 偷拍| 国产日韩欧美在线一区| 亚洲一区二区三区四区五区xx| 日韩中文字幕高清在线观看| 91丝袜美腿美女视频网站| 91cn在线观看| 亚洲另类欧美自拍| 亚洲天堂中文字幕在线| 亚洲精品五月天| 一本加勒比波多野结衣| 男女激情视频一区| 97超碰在线视| 亚洲激情77| 亚洲xxxxx电影| 漫画在线观看av| 最近2019年好看中文字幕视频| 国产成人免费看一级大黄| 性久久久久久久久久久久| 亚洲av熟女国产一区二区性色| 极品少妇一区二区三区精品视频| 福利视频一二区| 秋霞欧美视频| 国产成人精品日本亚洲11 | 国产精品精品久久久久久| 免费在线看a| 亚洲精品电影久久久| 在线免费观看av片| 天天色图综合网| 很污很黄的网站| 久久综合丝袜日本网| 一级片黄色免费| 久久午夜精品| 99re国产在线播放| 韩国美女久久| 欧美国产第二页| 在线观看免费黄视频| 日韩国产欧美区| 国产熟女一区二区三区五月婷| 欧美色图在线视频| 九九热视频精品| 国产精品久久久久久久久免费桃花 | 国产午夜精品视频| 成人久久精品人妻一区二区三区| 欧美三区在线视频| 丰满少妇xoxoxo视频| 亚洲在线视频免费观看| 99久久精品久久亚洲精品| 99re热视频精品| 年下总裁被打光屁股sp| 久久精品国产色蜜蜜麻豆| 黄www在线观看| 亚洲福利久久| www.好吊操| 澳门成人av| 亚洲最大av在线| 伊人久久大香| 国产精品男人的天堂| 亚洲欧洲日本韩国| 91精品国产免费久久久久久| 97超碰在线公开在线看免费| www.久久久久久.com| 成人动漫在线免费观看| 日韩精品视频在线观看免费| 欧美视频一二区| 亚洲国产精品久久久久秋霞不卡| 国产日韩一级片| 91精品黄色片免费大全| 91麻豆成人精品国产| 欧美视频一区二区三区在线观看| 天堂网中文字幕| 色菇凉天天综合网| 亚洲精品成人在线视频| 一本色道久久综合亚洲91| 国产精品人人人人| 欧美视频一二三| 国产精品一区无码| 色哟哟国产精品| 亚洲欧美日韩激情| 色老头久久综合| 日本熟妇一区二区三区| 欧美亚洲高清一区二区三区不卡| 国产91精品看黄网站在线观看| 色综合久久久久综合体| 日韩免费av网站| 欧美主播一区二区三区| 夜夜嗨av禁果av粉嫩avhd| 欧美裸体bbwbbwbbw| 99久久国产免费| 精品久久一区二区三区| 人妻中文字幕一区| 亚洲免费视频观看| 黄色在线视频观看网站| 中文字幕成人精品久久不卡| 麻豆视频网站在线观看| 欧美成年人视频网站| 大桥未久在线播放| 欧美一区二区三区免费观看| 日韩精品一区二区三区av| 91精品免费看| gogo人体一区| 欧美久久在线| 88国产精品视频一区二区三区| 一二三在线视频| 国产精品乱看| 在线观看免费污视频| 国产传媒日韩欧美成人| 好吊一区二区三区视频| 国产农村妇女精品| 国产这里有精品| 日韩欧美有码在线| 国产精品久久婷婷| 精品成人一区二区三区| 国产日韩精品在线看| 精品国偷自产在线视频| 国产h片在线观看| 国产免费一区二区三区在线观看| 中文字幕日韩在线| 欧美最大成人综合网| 综合日韩在线| 成人久久久久久久久| 国产尤物一区二区在线| 亚洲成人av免费在线观看| 国产精品色在线| 免费在线观看黄网站| 欧美日韩精品一区二区三区四区 | 久热国产精品视频| 日本蜜桃在线观看视频| 91系列在线观看| 无码少妇一区二区三区| 天天做天天爱天天高潮| 先锋影音久久久| 日韩精品在线播放视频| 久久精品视频一区二区三区| 欧美丰满艳妇bbwbbw| 在线看日本不卡| 少妇一级淫片免费看| 久久亚洲一区二区三区四区五区高 | 日韩中文在线电影| 国产原创中文在线观看| 久99久精品视频免费观看| 少妇光屁股影院| 亚洲在线观看免费| 国产欧美久久久| 一区二区三区美女xx视频| 不卡视频观看| 91免费看网站| 久久久久av| 在线观看免费黄网站| 久久人人爽人人爽| 国产精品成人免费一区二区视频| 欧美精品xxxxbbbb| av影片在线看| 日韩美女中文字幕| 欧美18xxxx| 国产男女免费视频| 国产大片一区二区| 九九热精品免费视频| 欧美一区二区播放| www.久久久久.com| 久久九九免费视频| 日韩中文影院| 青娱乐国产91| 久久婷婷一区| 亚洲熟妇无码av| 亚欧色一区w666天堂| 亚洲av无码乱码国产精品| 久久777国产线看观看精品| 99综合99| 永久免费看av| 国产成人av网站| 久草视频在线资源| 日韩欧美在线影院| 欧美videos另类精品| 99在线视频播放| 黄色精品一区| 中文字幕人妻一区| 午夜免费久久看| 五月天婷婷视频| 日韩美女免费线视频| 久久最新网址| 丰满少妇在线观看| 国产精品美女一区二区三区| 一级淫片免费看| 久久久精品2019中文字幕神马| 95精品视频| 欧美激情亚洲天堂| 99久久综合色| 欧美性猛交bbbbb精品| 亚洲日韩中文字幕| 国产亚洲人成a在线v网站| 亚洲在线播放电影| 国产一区在线看| 国产精品1000| 国产亚洲成精品久久| 国产一区高清| 国产成人亚洲综合无码| 成年人午夜久久久| 波多野结衣在线观看视频| 日韩在线观看你懂的| 日韩欧美一级| www.中文字幕在线| 国产日韩精品一区| 99国产精品欲| 91干在线观看| 日韩毛片视频| 性活交片大全免费看| 91精品1区2区| 大地资源网3页在线观看| 国产欧美日韩在线播放| 天使萌一区二区三区免费观看| 亚洲国产精品一区二区久久hs| 日韩美一区二区三区| 伊人久久av| 国产盗摄视频在线观看| 91麻豆国产福利精品| 91福利在线观看视频| 97视频在线观看成人| 日本欧美国产| 好男人香蕉影院| 欧美群妇大交群中文字幕| 国产美女高潮在线观看| 亚洲二区自拍| 91在线免费视频观看| 91国内精品视频| 欧美亚洲视频在线观看| 国产精品成久久久久| 熟女少妇一区二区三区| 欧美一区二区三区视频免费播放| www.com.cn成人|