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

如何使用FaceIO開發(fā)基于人工智能的Web?App用戶認證模塊

譯文
開發(fā) 前端 人工智能
在Web應用項目中可以使用FaceIO的JavaScript庫實現(xiàn)用戶認證。

譯者 | 李睿

審校 | 重樓

在過去的Web應用信息系統(tǒng)開發(fā)中,用戶認證是一個不可或缺的功能模塊。用戶認證功能包括用戶注冊和登錄認證。在以往的開發(fā)方法中,用戶認證功能模塊實現(xiàn)的常見方式是使用電子郵件和短信進行驗證。很多用戶的電腦都安裝了攝像頭,采用攝像頭可以充分利用人臉識別的人工智能技術(shù)來實現(xiàn)用戶認證。而使用FaceIO的JavaScript庫在Web應用程序項目中可以實現(xiàn)用戶身份驗證。

本文主要介紹如何通過第三方人工智能服務接口開發(fā)Web應用項目的用戶登錄模塊。Web應用程序項目的源代碼已上傳到GitHub,并基于MIT協(xié)議。沒有任何限制。

本項目是一個簡單完整的Web微服務系統(tǒng)。本項目采用前后端分離的開發(fā)方法,使用不同的項目文件路徑。

Plain Text 
 Technology stack of WEB APP project
 Operating System:Windows 10
 Front-end: Node.js 18.0.0, React 18.2.0, FaceIO, CoreUI 4.3.1
 Front-end development tool: WebStorm 2019
 Back-end: Java 1.8, Spring Boot, JWT, Mybatis, Maven
 Back-end development tool: IntelliJ IDEA 2019
 Database: MySQL 5.7+

這個Web項目的源代碼包括前端、后端和數(shù)據(jù)庫,是一個完整的Web應用程序信息系統(tǒng)。前端開發(fā)使用React,后端開發(fā)使用Java和SpringBoot,數(shù)據(jù)庫使用MySQL。第三方AI業(yè)務接口使用FaceIO。FaceIO提供了一個在線JavaScript庫,可以在前端代碼中直接引用。前端引用FaceIO庫之后,添加少量代碼即可輕松實現(xiàn)人臉認證,在與后端集成后,即可實現(xiàn)完整的用戶認證。前端界面使用CoreUI免費模板。

FaceIO的使用并不局限于瀏覽器。它可以在任何瀏覽器上運行,包括IE、Chrome、Firefox和Safari。而且,所有人工智能業(yè)務處理都是在FaceIO的服務器上完成的,所以FaceIO需要能夠訪問用戶當前瀏覽器上的攝像頭。

如何在前端React框架中使用FaceIO庫

步驟1:安裝和配置Node.js環(huán)境

從Node.js官方網(wǎng)站下載對應版本的Node.js壓縮包。這里使用的版本是V18.0.0。如果用戶想運行發(fā)布的這個開源網(wǎng)絡項目,最好也使用V18.0.0。由于Node.js版本的迭代速度相對較快,如果使用其他版本,這一開源Web項目中使用的本地JavaScript庫可能不兼容,可能無法運行。

在下載Node.js壓縮包之后,將壓縮包解壓到英文目錄下。因為使用IntelliJ IDEA開發(fā)前端React,所以需要在IntelliJ IDEA中配置Node.js和NPM,并指定Node.js的安裝目錄。

在Intelli J IDEA中配置Node.js和NPM后,用戶可以通過IntelliJ IDEA工具創(chuàng)建ReactApp項目。

步驟2:在FaceIO中申請公共ID

FaceIO提供了一個在線JavaScript庫。如果想使用FaceIO提供的人工智能服務,則需要為其APP申請一個公共ID。在登錄之前,首先注冊一個帳戶,然后根據(jù)項目創(chuàng)建一個應用程序以獲得公共ID。這個公共ID需要寫在ReactApp項目的代碼中。在申請公共ID時,F(xiàn)aceIO將為應用程序提供一個免費的公共ID版本,并對使用次數(shù)進行限制。

步驟3:在React應用程序項目中使用FaceIO

外部JavaScript庫地址由FaceIO提供。

JavaScript 
 const script = document.createElement('script');
 script.type = 'text/javascript';
 script.async = true;
 script.src = 'https://cdn.faceio.net/fio.js';
document.head.appendChild(script);

在引入fio.js之后,定義常量就可以使用了。代碼如下所示:

JavaScript 
 let myFaceIO;
 useEffect(()=>{
 //eslint-disable-next-line
 myFaceIO = new faceIO("fioab497");
 },[])

fioab497是應用注冊后的公共ID。用戶需要替換應用程序的公共ID。

需要注意的是,在上面代碼React的鉤子函數(shù)useEffect()中,有一行代碼//eslint-disable-next-line。如果用戶已經(jīng)在開發(fā)環(huán)境中安裝了eslint插件,則需要添加這行代碼。如果沒有這行代碼,eslint檢測將認為存在錯誤。錯誤提示如下:

ERROR in [eslint]
src\views\pages\login\Login.js
 Line 52:20: 'faceIO' is not defined no-undef

在開發(fā)環(huán)境中,Web項目將無法運行。因此,需要添加這一行注釋代碼來讓eslint跳過下一行代碼的檢測。

FaceIO提供了人臉注冊函數(shù)enroll()。代碼的使用方式如下:

JavaScript 
const faceSignUp = async ()=>{
 myFaceIO.enroll({
 "locale": "auto"
 }).then(userInfo => {
 console.log("facialId: " + userInfo.facialId)
 console.log(userInfo);
 handleLogin(userInfo,"login/signUp");
 }).catch(errCode => {
 console.log(errCode);
 })
 }

在上面的代碼中,函數(shù)enroll()以JSON字符串格式輸入數(shù)據(jù),并傳遞給FaceIO的人工智能接口。UserInfo是FaceIO人臉驗證后返回的數(shù)據(jù)對象。handllogin()是一個用戶定義的函數(shù),用于在接收到FaceIO返回的數(shù)據(jù)對象后與后端通信。當然,用戶也可以根據(jù)自己的開發(fā)情況,設置其他自定義函數(shù)來處理FaceIO返回的數(shù)據(jù)對象。

在函數(shù)enroll()輸入的JSON字符串格式數(shù)據(jù)中,還可以添加自定義JSON字符串數(shù)據(jù)。代碼如下所示

JavaScript 
 const faceSignUp = async ()=>{
 myFaceIO.enroll({
 "locale": "auto", // Default user locale
 "payload": {
 "user": 123456, 
 "email": "name@example.com"
 }
 }).then(userInfo => {
 console.log("facialId: " + userInfo.facialId)
 console.log(userInfo);
 handleLogin(userInfo,"login/signUp");
 }).catch(errCode => {
 console.log(errCode);
 })
 }

payload是FaceIO可以返回的數(shù)據(jù)節(jié)點。在“有效負載”中,可以添加需要返回的JSON格式數(shù)據(jù),并根據(jù)開發(fā)需求定制數(shù)據(jù)內(nèi)容。

調(diào)用函數(shù)enroll()后,瀏覽器將顯示FaceIO提供的人機交互用戶界面,并在瀏覽器提示符下啟動攝像頭。需要點擊“是”。FaceIO提供的用戶界面會自動在當前攝像頭前確認用戶的臉兩次,并要求當前用戶確認兩次PIN碼的設置。輸入的PIN碼將用于面部認證。

FaceIO提供了人臉認證函數(shù)authenticate()。代碼的使用方式如下:

JavaScript 
 const faceSignIn = async ()=>{
 myFaceIO.authenticate({
 "locale": "auto"
 }).then(userInfo => {
 console.log("facialId: " + userInfo.facialId)
 console.log(userInfo);
 handleLogin(userInfo,"login/signIn");
 }).catch(errCode => {
 console.log(errCode);
 })
 }

在調(diào)用authenticate()函數(shù)之后,瀏覽器將顯示FaceIO提供的人機交互用戶界面,啟動攝像頭,并要求當前登錄用戶輸入人臉注冊時設置的PIN碼。

根據(jù)FaceIO返回的數(shù)據(jù),自定義函數(shù)handleLogin()被傳遞到后端。后端接收數(shù)據(jù),分析數(shù)據(jù),并將結(jié)果返回給前端。前端執(zhí)行后續(xù)業(yè)務邏輯。如果用戶身份驗證成功,后端將向前端返回令牌數(shù)據(jù)。在前端確認登錄成功后,頁面跳轉(zhuǎn)到Dashboard完成整個用戶身份驗證過程。

前端接收到令牌數(shù)據(jù)后,將令牌數(shù)據(jù)保存在用戶當前瀏覽器的會話存儲中。在會話存儲中自定義了一個名為“Authorization”的項來存儲令牌數(shù)據(jù)。保存令牌數(shù)據(jù)的函數(shù)代碼如下:

JavaScript 
1 const setAuthorization = (Auth) => {
2 sessionStorage.setItem('Authorization',Auth)
3 }

獲取Token數(shù)據(jù)的函數(shù)代碼如下:

JavaScript 
1function getAuthorization () {
2 let Author = sessionStorage.getItem('Authorization')
3 if (Author === null) return ''
4 return Author
5 }

已經(jīng)在系統(tǒng)中設置了自動加載令牌數(shù)據(jù)。在后續(xù)的業(yè)務處理中,當訪問后端API時,令牌數(shù)據(jù)將自動放置在請求頭的授權(quán)中。代碼如下所示:

JavaScript 
 instanceForm.interceptors.request.use(
 (config) => {
 config.headers.authorization = getAuthorization()
 return config
 }
 )

如何在后端完成用戶認證

在Web項目中,使用SpringBoot作為后臺,開發(fā)語言為Java 1.8。在Spring框架中,創(chuàng)建一個處理用戶登錄身份驗證的控制層類。這個LoginController類也是一個用于處理用戶登錄身份驗證的API接口。代碼如下:

Java 
 package com.auto17.base.controller;
 import ...
 import ...
 @RestController
 @RequestMapping("/login")
 @CrossOrigin
 public class LoginController{
 protected final Logger logger = LoggerFactory.getLogger(LoginController.class);
 @Autowired
 private IAppUserService appUserService;
 @PostMapping("/signUp")
 public AjaxResult signUp(@RequestBody JSONObject userInfo) {
 ...
 }
15 @PostMapping("/signIn")
16 public AjaxResult signIn(@RequestBody JSONObject userInfo) {
17 ...
18 }
19 }

在上面的代碼中,@RequestMapping("/login")表示整個LoginController類的API路徑。

@PostMapping("/signUp")表示用戶注冊的API路徑,接收POST數(shù)據(jù)請求,使用函數(shù)signUp()處理用戶注冊。完整的API路徑是/login/signUp。

@PostMapping("/signIn")表示用戶身份驗證的API路徑。它接收POST數(shù)據(jù)請求。函數(shù)signIn()用于處理用戶身份驗證。完整的API路徑是/login/signIn。

在函數(shù)signUp()或signIn()中,解析前端React傳遞的JSON格式數(shù)據(jù)。從JSON數(shù)據(jù)中提取nodefacialId的值。FacialId是FaceIO成功驗證用戶時返回的唯一標識符。該ID是唯一的。在這個Web項目中,通過“facialId”判斷用戶,并通過facialId識別用戶。

需要注意的是,在這個Web項目中,JSON格式的數(shù)據(jù)從前端傳輸?shù)胶蠖耸敲魑牡模瑳]有進行數(shù)據(jù)加密。如果使用它,可以添加安全函數(shù)來加密JSON格式的數(shù)據(jù)。前端加密完成后,消息從前端傳輸?shù)胶蠖恕T诤蠖私饷芎螅瑢⒔馕鯦SON格式數(shù)據(jù)。加密方法有很多種。在此推薦RSA算法。RSA算法是一種非對稱加解密算法。在后端,也就是在用戶訪問Web時,服務器端生成一對RSA密鑰,包括公鑰和私鑰,并將公鑰提供給前端。前端使用公鑰對JSON格式的數(shù)據(jù)進行加密,然后傳輸?shù)胶蠖恕:蠖烁鶕?jù)私鑰對其進行解密。在解密之后,解析JSON格式數(shù)據(jù)。這可以最大限度地保護“facialId”的值不被輕易攔截。

在后端,在用戶被facialId成功識別之后。使用JWT方法保存當前登錄用戶的信息。JWT Utils類中的函數(shù)getToken(AppUser用戶)獲取當前用戶的令牌。使用facialId的值作為簽名密鑰。代碼如下所示

Java 
 public class JWTUtils {
 public static String getToken(AppUser user) {
 Calendar instance = Calendar.getInstance();
 //Token expiration time
 instance.add(Calendar.DATE, 1);
 JWTCreator.Builder builder = JWT.create();
 return builder.withAudience(String.valueOf(user.getUserId()))
 .withClaim("userId", user.getUserId())
 .withClaim("facialId", user.getFacialId())
 .withExpiresAt(instance.getTime())
 .sign(Algorithm.HMAC256(user.getFacialId()));
 }
 }

在后端獲取當前登錄用戶的令牌后,將令牌數(shù)據(jù)返回給前端。

用戶身份驗證成功后,后端將在每個后續(xù)API請求中接收用于用戶身份驗證的Token數(shù)據(jù)。已經(jīng)創(chuàng)建了一個攔截器類JWTInterceptor,用于在每個API請求之前驗證令牌數(shù)據(jù)。代碼如下所示:

Java 
 package com.auto17.base.security;
 import com.auto17.base.domain.AjaxResult;
 import com.auto17.faceLogin.domain.AppUser;
 import com.auto17.faceLogin.service.IAppUserService;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.PrintWriter;
 public class JWTInterceptor extends HandlerInterceptorAdapter {
 protected final Logger log = LoggerFactory.getLogger(JWTInterceptor.class);
 @Autowired
 private IAppUserService appUserService;

 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
 String token = request.getHeader("authorization");
 log.info("token="+token);
 if(StringUtils.isEmpty(token)){
 log.error("authorization is Empty");
 errorOut(response,"authorization is Empty");
 return false;
 }
 try {
 //get login user info
 String userNoString=JWTUtils.getAudience(token);
 log.info("userNoString="+userNoString);
 AppUser loginUser=appUserService.selectAppUserById(Long.valueOf(userNoString));
 if(loginUser!=null){
 JWTUtils.verify(token,loginUser.getFacialId());
 request.setAttribute("loginUser", loginUser);
 }else{
 errorOut(response,"check user fail");
 }
 } catch (Exception e) {
 errorOut(response,"check verify fail");
 e.printStackTrace();
 return false;
 }
 return true;
 }

 private void errorOut(HttpServletResponse response,String msg){
 try {
 response.setHeader("Access-Control-Allow-Origin","*");
 response.setContentType("text/json; charset=utf-8");
 response.setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS,DELETE");
 response.setHeader("Access-Control-Max-Age","3600");
 response.addHeader("Access-Control-Allow-Headers", "*");
 PrintWriter writer=response.getWriter();
 writer.print(AjaxResult.error(msg));
 writer.flush();
 writer.close();
 }catch (Exception e){
 e.printStackTrace();
 }
 }
 }

除了在前端提供易于使用的功能之外,F(xiàn)aceIO還提供了REST API,允許從后端管理應用程序。每個FaceIO應用程序都會自動分配一個API密鑰可以從FaceIO控制臺的應用程序管理器中檢索這一密鑰。API鍵允許用戶從專用的后端環(huán)境以編程方式管理應用程序可以使用SpringBoot的RestTemplate輕松實現(xiàn)它。因為這一項目是一個簡單的應用程序,所以沒有在這方面使用它。如果用戶感興趣,可以訪問FaceIO其余API的在線文檔。

如何設計數(shù)據(jù)庫

在這個Web項目中,數(shù)據(jù)庫使用MySQL。為了配合人臉識別,設計了一個簡單的用戶表。創(chuàng)建表SQL語句

SQL 
 CREATE TABLE `app_user` (
 `user_id` int(11) NOT NULL AUTO_INCREMENT,
 `facial_id` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
 `nick_name` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
 `true_name` varchar(160) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
 `age` smallint(6) DEFAULT NULL,
 `gender` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
 `reg_time` datetime(0) DEFAULT NULL,
 `last_login_time` datetime(0) DEFAULT NULL,
 PRIMARY KEY (`user_id`) USING BTREE,
 UNIQUE INDEX `idx_facialid`(`facial_id`) USING BTREE
 )

數(shù)據(jù)表中的字段facal_id用于存儲FaceIO返回的唯一用戶ID。這是一個簡單的用戶數(shù)據(jù)表。沒有用戶密碼字段或用戶手機字段。該用戶數(shù)據(jù)表僅使用字段“facal_id”完成登錄用戶的認證和識別。

用戶在FaceIO完成注冊后,F(xiàn)aceIO返回的JSON字符串數(shù)據(jù)中包含“details”節(jié)點,即FaceIO人工智能識別的當前用戶的年齡和性別。將它存儲在用戶數(shù)據(jù)表中的“年齡”和“性別”字段中這是目前的開發(fā)方法。

當然,也可以保留以前的用戶認證的開發(fā)方法,同時仍然保留登錄密碼和SMS認證。在原有開發(fā)方法的基礎上,增加了FaceIO的人臉認證方法。在原有的用戶數(shù)據(jù)表中,添加字段facal_id綁定人工智能的人臉識別。

原文標題:Using the JavaScript library of FaceIO to implement user authentication in a web application project作者:jianxiang sun

責任編輯:華軒 來源: 51CTO
相關(guān)推薦

2020-07-03 09:42:13

人工智能機器學習技術(shù)

2018-07-05 14:52:05

2024-03-15 14:26:28

2021-08-26 14:16:28

物聯(lián)網(wǎng)人工智能IoT

2023-06-06 16:27:06

人工智能Web 3.0

2020-03-25 09:53:33

人工智能AI技術(shù)

2022-07-29 15:47:25

人工智能AI

2022-08-01 10:41:03

人工智能認證人工智能

2022-06-20 11:05:58

通用人工智能機器人

2021-07-12 14:16:01

人工智能AI深度學習

2020-09-16 10:37:10

人工智能AI技術(shù)

2019-04-01 15:46:49

AI微軟Outlook on

2023-10-17 10:20:23

2023-06-19 15:46:25

2019-02-21 10:02:35

人工智能AI機器學習

2024-04-24 14:11:07

2020-11-23 11:11:29

人工智能

2016-12-26 14:55:06

人工智能現(xiàn)狀

2021-03-22 12:08:30

人工智能

2022-08-04 13:29:50

人工智能自動化數(shù)據(jù)研究
點贊
收藏

51CTO技術(shù)棧公眾號

日韩午夜激情av| 亚洲乱码日产精品bd| 国产成人精品在线观看| 欧美特级aaa| 国产激情在线观看| 成人免费三级在线| 国产成人免费av| 老熟妻内射精品一区| 97成人超碰| 亚洲另类在线一区| 久久av免费观看| ,一级淫片a看免费| 99视频在线精品国自产拍免费观看| 91精品福利在线一区二区三区| 翔田千里亚洲一二三区| 国产极品久久久| 亚洲一区观看| 欧美xxxx做受欧美.88| 亚洲观看黄色网| 日韩成人在线电影| 欧美视频中文字幕在线| 老牛影视免费一区二区| 国产按摩一区二区三区| 日韩精品一二三| 久久久久久久久中文字幕| 性欧美精品男男| 国产精品极品| 欧美一区二区三区视频| 亚洲少妇第一页| 川上优av中文字幕一区二区| ...av二区三区久久精品| 久久久一本精品99久久精品66| 日韩无码精品一区二区三区| 91久久高清国语自产拍| 亚洲色图18p| a级片在线观看视频| 99er精品视频| 欧美最新大片在线看| 在线播放 亚洲| www.久久精品.com| 美女免费视频一区二区| 欧美专区在线观看| 99久久久无码国产精品不卡| 国产95亚洲| 欧美午夜精品久久久| 无码精品a∨在线观看中文| 黄网av在线| 亚洲人成亚洲人成在线观看图片| 国产偷国产偷亚洲高清97cao| 草久久免费视频| 亚洲高清成人| 欧美精品www| 亚洲国产成人精品综合99| 国产主播性色av福利精品一区| 欧美性猛交xxxx富婆弯腰| 黄色激情在线视频| 青春草在线免费视频| 亚洲女同女同女同女同女同69| 激情视频在线观看一区二区三区| 97人妻精品视频一区| 首页亚洲欧美制服丝腿| 国产精品27p| 亚洲中文一区二区| 秋霞电影网一区二区| 欧美精品激情在线观看| 精品视频久久久久| 精品成人久久| 69精品小视频| 神马久久久久久久| 亚洲精品人人| 91高清视频免费观看| caoporn国产| 日韩国产精品大片| 91精品久久久久久久| 探花视频在线观看| 日韩激情中文字幕| 91精品国产自产在线| 丁香六月婷婷综合| 日本不卡不码高清免费观看| 国产女人18毛片水18精品| 国产精品热久久| 国产精品66部| 久久国产一区| 国内三级在线观看| 亚洲欧洲www| 99久久国产综合精品五月天喷水| 成年视频在线观看| 香蕉久久一区二区不卡无毒影院 | 大伊香蕉精品在线品播放| 精品99久久久久久| 欧美性猛交xxxx乱| 午夜久久免费观看| 97香蕉超级碰碰久久免费的优势| 欧美成人国产精品高潮| 亚洲成人在线| 国产免费一区视频观看免费 | 亚洲欧美日韩动漫| 亚洲国产精品99久久久久久久久| 欧美精品成人一区二区在线观看| 少妇高潮一区二区三区99小说| 国产一区二区三区久久悠悠色av| 国产精品丝袜高跟| 亚洲精品国偷拍自产在线观看蜜桃 | se69色成人网wwwsex| 欧美一级片在线观看| 欧洲一级黄色片| 久久人体视频| 538国产精品一区二区免费视频| 国产大片aaa| 青青草97国产精品免费观看 | 三区精品视频观看| 成人在线观看亚洲| 91搞黄在线观看| 国产乱国产乱老熟300部视频| 91精品入口| 精品成人免费观看| 岛国片在线免费观看| 9色精品在线| 亚洲自拍在线观看| wwwxxx在线观看| 欧美日韩在线视频观看| 老司机午夜av| 国产欧美三级电影| 久久视频在线视频| 欧美日韩 一区二区三区| 粉嫩嫩av羞羞动漫久久久| 九色91国产| 99自拍视频在线观看| 欧美性淫爽ww久久久久无| 黄色短视频在线观看| 国产精品地址| aa日韩免费精品视频一| 午夜不卡视频| 欧美亚洲日本国产| 色噜噜日韩精品欧美一区二区| 精品一区av| 91福利视频在线观看| 狠狠人妻久久久久久综合麻豆| 91蝌蚪porny成人天涯| 中文精品无码中文字幕无码专区| 美女av在线免费看| 欧美性感一区二区三区| 丰满少妇在线观看资源站| 亚洲激情午夜| 国产乱码一区| 婷婷在线视频观看| 欧美午夜精品一区二区三区 | 久久婷婷一区二区三区| 国产毛片视频网站| 超碰97久久| 久久久久久久激情视频| 亚洲欧美强伦一区二区| 伊人一区二区三区| 久久久久久久久久久影视| 亚洲草久电影| 99久久国产免费免费| 国产在线高潮| 日韩一级二级三级| 久久婷婷国产麻豆91| 福利91精品一区二区三区| 欧美一级中文字幕| 澳门久久精品| 69视频在线播放| 国产在线视频网站| 欧美日韩亚洲综合在线| 精品少妇一区二区三区密爱| 九一久久久久久| 六月婷婷久久| av中文资源在线资源免费观看| 欧美三片在线视频观看| 网站永久看片免费| 国产精品伊人色| 日韩精品久久一区二区| 久久久亚洲欧洲日产| 91精品国产高清久久久久久久久| 国产乱色精品成人免费视频| 亚洲女与黑人做爰| 五十路六十路七十路熟婆| 久久深夜福利| 国产a级片免费看| 精品欧美午夜寂寞影院| 国产91在线高潮白浆在线观看| 天堂av一区二区三区| 欧美日韩一二三四五区| 殴美一级黄色片| 成人永久免费视频| 日韩中文字幕免费在线| 国产国产精品| 国产在线观看91精品一区| 岛国中文字幕在线| 国产午夜精品麻豆| 91 中文字幕| 国产精品另类一区| 天天爽人人爽夜夜爽| 国产精品国产三级国产在线观看| 国产精品日韩精品| 精品国产丝袜高跟鞋| 亚洲福利视频二区| 一级黄色大片免费观看| 国产精品三级视频| 欧洲成人午夜精品无码区久久| 午夜精品久久| 日韩精品一区二区三区色偷偷| 我爱我色成人网| 欧美精品做受xxx性少妇| 凸凹人妻人人澡人人添| 7777精品伊人久久久大香线蕉 | 精品免费视频| 666精品在线| 日韩制服一区| 国外成人在线直播| 青青草在线播放| 91精品国产91久久久久久最新毛片 | 91浏览器在线观看| 国产精品不卡在线| 人妻精品久久久久中文字幕69| 亚洲一区二区| 无码免费一区二区三区免费播放 | 国产成人在线播放| 久久av色综合| 日韩有码片在线观看| 你懂的在线看| av电影网站在线观看| 懂色av一区二区| 91精品国产综合久久久久久蜜臀| 在线免费看黄网站| 亚洲黄色www| 国产av无码专区亚洲av| 欧美网站大全在线观看| 国精品无码一区二区三区| 久久精品这里都是精品| youjizz.com国产| 国产美女久久久久| 欧美一级xxxx| 日本中文字幕一区| 色欲av无码一区二区人妻| 亚洲视频综合| 色哺乳xxxxhd奶水米仓惠香| 日韩不卡一区| 日韩久久精品一区二区三区| 偷拍视屏一区| 久久国产精品久久| 亚洲调教一区| 开心色怡人综合网站| 亚洲香蕉视频| 久久av一区二区三区亚洲| 福利欧美精品在线| 国产精品 日韩| 成人三级av在线| 国产精品我不卡| 91蜜桃臀久久一区二区| 国产精品日韩一区二区三区| 日韩成人在线观看视频| 91久久精品国产91久久| 欧洲精品久久久久毛片完整版| 欧美情侣性视频| 超碰电影在线播放| 久久香蕉频线观| 污片在线免费观看| 尤物九九久久国产精品的特点| www.国产麻豆| 亚洲第一区在线观看| 亚洲一区二区天堂| 制服视频三区第一页精品| 国产男女裸体做爰爽爽| 日韩一区二区在线看| 动漫av一区二区三区| 欧美日韩aaaaaa| www.av黄色| 日韩电影中文字幕一区| 国产精品久久一区二区三区不卡| 精品国精品国产| 人妻少妇精品无码专区久久| 日韩h在线观看| 国产在线高清| xxxxx成人.com| 国产精品探花在线| 青草青草久热精品视频在线网站 | 国产在线一区观看| 一区二区三区欧美精品| 国产成人免费高清| 精品无码国产一区二区三区51安| 国产aⅴ综合色| 日韩av影视大全| 久久狠狠亚洲综合| 色婷婷狠狠18禁久久| 91视频www| 久久久久久久久久97| 欧美激情在线观看视频免费| 日韩av一二区| 国产精品美女久久福利网站| 免费在线观看亚洲| 一本到三区不卡视频| 中文字幕日韩免费| 欧美一级专区免费大片| 色就是色亚洲色图| 俺去啦;欧美日韩| 免费黄色在线看| 97在线免费观看视频| 日韩成人综合网站| 九九热久久66| 欧美一区高清| www日韩视频| 成人性色生活片免费看爆迷你毛片| 欧美污在线观看| 久久蜜臀中文字幕| 欧美极品aaaaabbbbb| 欧美日韩在线播放一区| 国产又爽又黄免费软件| 亚洲国产另类 国产精品国产免费| 日韩在线观看视频网站| 日日摸夜夜添一区| 美女福利一区二区| 岛国一区二区三区高清视频| 日韩av片子| 日批视频在线免费看| 国产成人免费视频网站 | 欧美中日韩免费视频| 国产欧美日韩精品一区二区三区| 日韩av一级大片| 久久国产影院| 97在线播放视频| 美日韩一区二区| 97人妻天天摸天天爽天天| 欧美极品xxx| 久久艹免费视频| 欧美不卡在线视频| 99在线播放| 91在线精品播放| 欧美3p在线观看| 青青草av网站| 久久久综合九色合综国产精品| 在线观看天堂av| 色噜噜夜夜夜综合网| 国产免费高清av| 中文字幕欧美日韩| 日本免费久久| 欧美日本韩国国产| 亚洲专区欧美专区| 一级特黄a大片免费| 亚洲国产另类精品专区| 亚洲第一页在线观看| 欧美大荫蒂xxx| 欧美成人精品午夜一区二区| 中文字幕乱码一区二区三区| 全部av―极品视觉盛宴亚洲| 亚洲自拍偷拍图| 欧洲av一区二区嗯嗯嗯啊| 国产精品一区二区婷婷| 国产成人亚洲精品| 欧美日一区二区| 国产又粗又长又大的视频| 欧美国产丝袜视频| 亚洲在线免费观看视频| 日韩中文字幕免费视频| 青草综合视频| 欧美性色黄大片人与善| 久久午夜av| 极品人妻videosss人妻| 欧美色视频一区| 午夜视频免费看| 日本欧美一级片| 成人a'v在线播放| 欧美一级特黄a| 91在线视频观看| 国产熟妇一区二区三区四区| 国产午夜精品视频免费不卡69堂| 色呦呦在线观看视频| 国产激情美女久久久久久吹潮| 婷婷精品进入| av无码精品一区二区三区| 欧美国产一区在线| 国产毛片毛片毛片毛片毛片| 欧美成人免费小视频| 国产精品nxnn| 成年人免费大片| 9色porny自拍视频一区二区| 黄色在线免费观看| 色yeye香蕉凹凸一区二区av| www成人在线视频| 亚洲欧洲一区二区福利| 国产精品亚洲成人| 最新一区二区三区| 欧美日韩国产不卡| 丰乳肥臀在线| 欧美专区一二三| 国产一区二区看久久| 少妇太紧太爽又黄又硬又爽 | 国内精品在线视频| 91日韩在线播放| 一本色道久久精品| 国产jizz18女人高潮| 亚洲国产天堂网精品网站| 成人看片网站| 无码人妻少妇伦在线电影| 国产成人av网站| 波多野结衣激情视频| 欧美日本在线视频中文字字幕| 国产suv精品一区二区四区视频| 日韩中文在线字幕|