亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

從零搭建短信驗(yàn)證碼接收平臺(tái):接收、存儲(chǔ)、查詢與回調(diào)全鏈路教程

從零搭建短信驗(yàn)證碼接收平臺(tái):接收、存儲(chǔ)、查詢與回調(diào)全鏈路教程 做應(yīng)用開發(fā)這些年短信驗(yàn)證碼這東西看著不起眼但真到聯(lián)調(diào)階段能把人逼瘋。自己手機(jī)號(hào)不敢亂填、測(cè)試環(huán)境收不到短信、第三方平臺(tái)回調(diào)遲遲不來、驗(yàn)證碼過期了才發(fā)現(xiàn)沒存下來——這些問題幾乎每個(gè)后端和測(cè)試都遇到過。所以我花了兩個(gè)周末從零搭了一套短信驗(yàn)證碼接收平臺(tái)把接收、存儲(chǔ)、查詢、通知、管理后臺(tái)全鏈路打通順手整理成這篇超詳細(xì)教程。無論你是做API開發(fā)、自動(dòng)化測(cè)試、第三方登錄對(duì)接還是想給業(yè)務(wù)系統(tǒng)加個(gè)驗(yàn)證碼兜底通道這篇都能直接抄作業(yè)。整個(gè)平臺(tái)本質(zhì)上干的事情很簡(jiǎn)單把散落在各處的短信驗(yàn)證碼統(tǒng)一收攏到一個(gè)地方再通過HTTP接口或管理后臺(tái)隨時(shí)查。但真正落地的時(shí)候接入方式選型、數(shù)據(jù)模型設(shè)計(jì)、過期策略、回調(diào)防重、安全簽名這些細(xì)節(jié)才是大頭一個(gè)沒想清楚后面就要返工。下面按我的實(shí)際搭建順序從架構(gòu)設(shè)計(jì)講到部署上線把每一步的理由和坑都說明白。1. 平臺(tái)定位與整體方案設(shè)計(jì)1.1 這個(gè)平臺(tái)到底解決什么問題短信驗(yàn)證碼接收平臺(tái)不是一個(gè)給普通用戶用的產(chǎn)品它解決的是開發(fā)和測(cè)試環(huán)節(jié)里的一個(gè)具體痛點(diǎn)你沒法穩(wěn)定、可控地收到驗(yàn)證碼。比如你在做用戶注冊(cè)流程的自動(dòng)化測(cè)試每次跑用例都要真實(shí)填一個(gè)手機(jī)號(hào)、等短信、再讀驗(yàn)證碼填回去短信延遲一波動(dòng)整個(gè)用例就掛了。再比如你對(duì)接了某個(gè)第三方服務(wù)對(duì)方要求你提供接收回調(diào)的地址來收驗(yàn)證碼通知你總不能在本地起個(gè)服務(wù)等它回調(diào)。所以這個(gè)平臺(tái)的價(jià)值就三條第一把驗(yàn)證碼接收入口統(tǒng)一成標(biāo)準(zhǔn)HTTP接口方便任意語言調(diào)用第二把驗(yàn)證碼和手機(jī)號(hào)、業(yè)務(wù)標(biāo)識(shí)、時(shí)間關(guān)聯(lián)起來能按條件快速檢索第三提供管理后臺(tái)人也能直接查不用翻日志。想明白這三點(diǎn)后面的架構(gòu)就不會(huì)跑偏。1.2 兩條接入路線回調(diào)轉(zhuǎn)發(fā)還是硬件模塊接收短信驗(yàn)證碼本質(zhì)上就兩條路要么從云短信服務(wù)商那里拿回調(diào)要么自己搞一個(gè)能收短信的硬件網(wǎng)關(guān)。兩條路我都試過感受完全不同。云短信服務(wù)商回調(diào)是首選也是絕大多數(shù)業(yè)務(wù)場(chǎng)景適用的。原理是你把驗(yàn)證碼發(fā)到某個(gè)手機(jī)號(hào)之后運(yùn)營商或短信平臺(tái)會(huì)把短信內(nèi)容以HTTP回調(diào)的形式推送到你指定的URL你的平臺(tái)負(fù)責(zé)接收、解析、入庫。這種方式零硬件成本、接收延遲低、部署簡(jiǎn)單而且只要能收到回調(diào)驗(yàn)證碼內(nèi)容、發(fā)送時(shí)間、手機(jī)號(hào)這些字段都是結(jié)構(gòu)化帶過來的解析非常干凈。硬件GSM模塊方案則是兜底方案適合沒有云短信服務(wù)商資源、或者要收的是真實(shí)手機(jī)卡短信的場(chǎng)景。常見做法是搞一個(gè)樹莓派或者工控機(jī)插上SIM800L之類的GSM模塊模塊收到短信后通過串口把內(nèi)容讀出來再POST到你平臺(tái)的接口。這個(gè)方案的好處是短信真正落在你自己的卡上缺點(diǎn)也明顯硬件要維護(hù)、SIM卡要養(yǎng)號(hào)、信號(hào)不穩(wěn)定、并發(fā)一高就丟消息。我建議按需選擇不要一上來就上硬件先把回調(diào)方案跑通再說。1.3 技術(shù)選型為什么用 FastAPI Redis SQLite技術(shù)棧我選的是Python FastAPI Redis SQLite沒上重型中間件。原因很實(shí)際這個(gè)平臺(tái)的定位是輕量級(jí)內(nèi)部工具不是高并發(fā)業(yè)務(wù)系統(tǒng)。FastAPI寫起來快、自帶API文檔、異步性能也夠用Redis用來做驗(yàn)證碼的短期緩存和過期控制天然支持TTL省去自己寫定時(shí)任務(wù)刪數(shù)據(jù)的麻煩SQLite作為持久化存儲(chǔ)單文件備份方便數(shù)據(jù)量到百萬級(jí)之前完全扛得住。你要是更習(xí)慣Java或Go這套架構(gòu)思路完全能平移代碼邏輯都是一樣的。核心區(qū)別只在語法層。我傾向把重心放在設(shè)計(jì)思路上不要糾結(jié)用哪個(gè)框架先跑通再優(yōu)化。2. 核心數(shù)據(jù)模型與驗(yàn)證碼生命周期2.1 數(shù)據(jù)表設(shè)計(jì)與字段含義先看表結(jié)構(gòu)這是整個(gè)平臺(tái)的骨架。我設(shè)計(jì)了一張sms_code表字段如下字段名類型說明idINTEGER 主鍵自增唯一IDphoneVARCHAR(20)接收驗(yàn)證碼的手機(jī)號(hào)codeVARCHAR(10)驗(yàn)證碼內(nèi)容messageTEXT完整短信原文biz_idVARCHAR(64)業(yè)務(wù)標(biāo)識(shí)比如注冊(cè)、登錄、找回密碼channelVARCHAR(32)來源渠道aliyun/twilio/gsm等statusTINYINT0待使用 1已使用 2已過期expire_atDATETIME過期時(shí)間created_atDATETIME接收時(shí)間notifiedTINYINT是否已推送給業(yè)務(wù)方0/1每個(gè)字段都有用途重點(diǎn)說幾個(gè)容易忽略的。biz_id很關(guān)鍵業(yè)務(wù)方調(diào)用查詢接口時(shí)往往不是只查一個(gè)手機(jī)號(hào)下的所有驗(yàn)證碼而是帶著自己的業(yè)務(wù)單號(hào)來查沒有這個(gè)字段查詢就抓瞎。message必須存完整原文因?yàn)轵?yàn)證碼解析可能出錯(cuò)留原文方便事后核對(duì)。notified這個(gè)字段很多人會(huì)省但它是做回調(diào)通知防重的基礎(chǔ)沒有它回調(diào)推送失敗重試時(shí)就無法判斷是否已經(jīng)推過。2.2 驗(yàn)證碼狀態(tài)機(jī)待使用、已使用、已過期驗(yàn)證碼的生命周期很清晰三種狀態(tài)來回流轉(zhuǎn)待使用消息接收成功、解析出驗(yàn)證碼、入庫完成后的初始狀態(tài)。已使用業(yè)務(wù)方通過接口標(biāo)記該驗(yàn)證碼已被消費(fèi)防止同一驗(yàn)證碼被重復(fù)使用。已過期到達(dá)預(yù)設(shè)有效期后自動(dòng)進(jìn)入查詢接口默認(rèn)不返回過期驗(yàn)證碼。狀態(tài)流轉(zhuǎn)要在代碼里強(qiáng)制約束不能只在界面上顯示。我實(shí)現(xiàn)的邏輯是查詢接口返回待使用狀態(tài)的驗(yàn)證碼標(biāo)記使用時(shí)通過UPDATE ... WHERE status 0的方式做樂觀鎖如果更新影響行數(shù)為0說明已經(jīng)被消費(fèi)或過期直接返回失敗。這樣即使在多線程并發(fā)場(chǎng)景下同一個(gè)驗(yàn)證碼也只會(huì)被消費(fèi)一次。2.3 過期策略與防重復(fù)消費(fèi)過期策略我用了雙保險(xiǎn)。Redis里存一份keyTTL設(shè)為驗(yàn)證碼有效期默認(rèn)5分鐘到點(diǎn)自動(dòng)消失SQLite里也維護(hù)expire_at字段查詢時(shí)用SQL過濾expire_at now()。這樣即使Redis數(shù)據(jù)被清掉數(shù)據(jù)庫層依然有兜底。這里有個(gè)細(xì)節(jié)值得說驗(yàn)證碼的有效期應(yīng)該從短信發(fā)送時(shí)間算而不是從平臺(tái)接收時(shí)間算。云短信服務(wù)商回調(diào)里通常會(huì)帶發(fā)送時(shí)間沒有的話就取平臺(tái)接收時(shí)間近似。5分鐘有效期是個(gè)經(jīng)驗(yàn)值業(yè)務(wù)上一般短信驗(yàn)證碼都是5分鐘有效你按自己業(yè)務(wù)調(diào)整即可。過期時(shí)間到了不要物理刪除數(shù)據(jù)保留記錄便于審計(jì)只靠status2標(biāo)記過期就行等哪天數(shù)據(jù)膨脹了再定期清理。3. 短信接入層實(shí)現(xiàn)從收到短信到入庫3.1 方案A云短信服務(wù)商回調(diào)Webhook接入云短信回調(diào)的接入邏輯是最順的。以阿里云短信為例你在控制臺(tái)配置上行消息回調(diào)地址指向平臺(tái)的/webhook/sms接口即可。服務(wù)商收到短信后會(huì)把消息內(nèi)容POST到這個(gè)地址你的接口只需要驗(yàn)簽、解析、入庫三步。下面是我實(shí)現(xiàn)的FastAPI回調(diào)接口核心代碼# webhook.py import hashlib import hmac import json from datetime import datetime, timedelta from fastapi import APIRouter, Request, HTTPException router APIRouter(prefix/webhook, tags[webhook]) def verify_signature(payload: bytes, signature: str, secret: str) - bool: 服務(wù)商會(huì)用 secret 對(duì)請(qǐng)求體做 HMAC-SHA256 簽名 我們這邊用同樣的方式計(jì)算一次對(duì)比是否一致。 expected hmac.new( secret.encode(utf-8), payload, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature) router.post(/sms) async def receive_sms_callback(request: Request): 接收云短信服務(wù)商的回調(diào)。 兼容阿里云/Twilio等常見格式字段名不同就做個(gè)映射。 body await request.body() headers request.headers signature headers.get(X-Signature, ) secret your_webhook_secret # 與短信平臺(tái)配置一致 if not verify_signature(body, signature, secret): raise HTTPException(status_code403, detailsignature verify failed) data json.loads(body) # 字段映射兼容不同服務(wù)商 phone data.get(phone) or data.get(mobile) or data.get(To) code data.get(code) or data.get(smsCode) or data.get(Body) message data.get(message) or data.get(text) or data.get(content) channel data.get(channel, unknown) if not phone or not code: raise HTTPException(status_code400, detailmissing required fields) # 入庫 緩存 通知一并處理 await save_sms_code( phonephone, codecode, messagemessage, channelchannel, expire_atdatetime.now() timedelta(minutes5), ) return {code: 0, msg: ok}這段代碼里最容易被坑的是驗(yàn)簽。很多服務(wù)商不是簡(jiǎn)單放一個(gè)簽名頭而是把簽名放在 query 參數(shù)里或者對(duì) body 做base64之后再簽名你按他們的文檔調(diào)整verify_signature里的簽名算法就行。我建議先不開啟驗(yàn)簽跑通全流程確認(rèn)回調(diào)能正常收到之后再打開驗(yàn)簽排查起來更快。3.2 方案BGSM模塊自建短信網(wǎng)關(guān)如果你沒有云短信服務(wù)商資源而是要用真實(shí)SIM卡收短信那就用GSM模塊方案。硬件連接方式很簡(jiǎn)單SIM800L模塊的VCC接5V電源、GND接地、TXD/RXD分別接樹莓派的RX/TX插上SIM卡、接好天線然后通過Python的pyserial讀取串口數(shù)據(jù)。核心邏輯是監(jiān)聽串口當(dāng)有新短信進(jìn)來時(shí)AT指令會(huì)主動(dòng)推送CMTI: SM, index這樣的通知然后你發(fā)送ATCMGRindex讀取指定索引的短信內(nèi)容解析出手機(jī)號(hào)和驗(yàn)證碼再POST到平臺(tái)的接收接口。這里有個(gè)大坑SIM卡短信存滿之后新短信會(huì)收不到所以每讀完一條就要用ATCMGDindex刪除保持存儲(chǔ)空間可用。GSM模塊收到短信內(nèi)容后如果驗(yàn)證碼和手機(jī)號(hào)是混在一起的用正則提取就行。比如短信內(nèi)容【XX網(wǎng)】您的驗(yàn)證碼是1234565分鐘內(nèi)有效用re.search(r(\\d{4,6}), message)就能把驗(yàn)證碼摳出來。整個(gè)過程不復(fù)雜但硬件調(diào)試耗時(shí)我前前后后折騰了一天才穩(wěn)定信號(hào)不好時(shí)收發(fā)延遲會(huì)到十幾秒要有心理準(zhǔn)備。3.3 入庫邏輯與消息隊(duì)列解耦回調(diào)接口收到短信后不能直接同步寫入數(shù)據(jù)庫就算完。因?yàn)槿霂熘笸€要做兩件事往Redis寫緩存、向外推送通知給業(yè)務(wù)方。這三件事如果串行做回調(diào)接口的響應(yīng)時(shí)間會(huì)被通知推送拖慢服務(wù)商那邊超時(shí)就會(huì)重推造成重復(fù)數(shù)據(jù)。我的做法是入庫之后把“推送通知”這個(gè)動(dòng)作塞進(jìn)一個(gè)內(nèi)存隊(duì)列由后臺(tái)任務(wù)池異步消費(fèi)回調(diào)接口只負(fù)責(zé)快速落庫并返回。如果你用Celery或者其他任務(wù)隊(duì)列也完全可以原理一樣。FastAPI里最簡(jiǎn)單的做法是用BackgroundTasksfrom fastapi import BackgroundTasks async def save_sms_code(phone: str, code: str, message: str, channel: str, expire_at: datetime): # 入庫 SQLite insert_sql INSERT INTO sms_code (phone, code, message, channel, status, expire_at, created_at) VALUES (?, ?, ?, ?, 0, ?, ?) await db.execute(insert_sql, ( phone, code, message, channel, expire_at.strftime(%Y-%m-%d %H:%M:%S), datetime.now().strftime(%Y-%m-%d %H:%M:%S), )) # 寫 RedisTTL 5 分鐘 redis_key fsms:latest:{phone} await redis.setex(redis_key, 300, json.dumps({ phone: phone, code: code, message: message, channel: channel, })) # 異步推送 background_tasks.add_task(notify_business, phone, code, message) router.post(/sms) async def receive_sms_callback(request: Request, background_tasks: BackgroundTasks): ... await save_sms_code(..., background_tasks) return {code: 0, msg: ok}這樣做的好處是回調(diào)接口的響應(yīng)時(shí)間穩(wěn)定在毫秒級(jí)服務(wù)商不會(huì)因?yàn)槌瑫r(shí)重推。入庫和通知解耦后哪怕通知服務(wù)掛了也不影響短信的正常接收和存儲(chǔ)。4. 查詢API與異步通知設(shè)計(jì)4.1 查詢接口按手機(jī)號(hào)或業(yè)務(wù)標(biāo)識(shí)拉取驗(yàn)證碼查詢接口是平臺(tái)對(duì)外輸出能力的主要入口。業(yè)務(wù)方的典型場(chǎng)景是測(cè)試腳本執(zhí)行到填寫驗(yàn)證碼這一步時(shí)調(diào)用你的接口傳入手機(jī)號(hào)拿到驗(yàn)證碼再填回去完成流程。所以接口設(shè)計(jì)要簡(jiǎn)單直接參數(shù)越少越好。# query_api.py from fastapi import APIRouter, Query router APIRouter(prefix/api, tags[api]) router.get(/sms/code) async def get_sms_code( phone: str Query(..., description手機(jī)號(hào)), biz_id: str Query(None, description業(yè)務(wù)標(biāo)識(shí)可選), ): 查詢最新一條未使用的驗(yàn)證碼。 默認(rèn)返回當(dāng)前時(shí)間前5分鐘內(nèi)、狀態(tài)為待使用的記錄。 sql SELECT id, phone, code, message, biz_id, channel, status, expire_at, created_at FROM sms_code WHERE phone ? AND status 0 AND expire_at ? ORDER BY id DESC LIMIT 1 row await db.fetch_one(sql, (phone, datetime.now().strftime(%Y-%m-%d %H:%M:%S))) if not row: return {code: 1, msg: no available sms code, data: None} if biz_id and row[biz_id] ! biz_id: return {code: 1, msg: biz_id mismatch, data: None} return {code: 0, msg: ok, data: dict(row)}查詢邏輯有一個(gè)重要的取舍默認(rèn)只返回最新一條待使用驗(yàn)證碼而不是返回所有記錄。原因是一般業(yè)務(wù)場(chǎng)景下你只需要最新的那個(gè)驗(yàn)證碼返回太多反而容易取錯(cuò)。如果你確實(shí)需要全部記錄加一個(gè)limit參數(shù)讓調(diào)用方自己控制即可。4.2 回調(diào)通知驗(yàn)證碼到達(dá)后主動(dòng)推送給業(yè)務(wù)方查詢接口是拉模式業(yè)務(wù)方主動(dòng)來取。但有些場(chǎng)景更適合推模式——驗(yàn)證碼一到達(dá)平臺(tái)主動(dòng)POST到業(yè)務(wù)方指定的回調(diào)地址業(yè)務(wù)方不用輪詢。我在平臺(tái)里加了一個(gè)notify_url配置業(yè)務(wù)方注冊(cè)時(shí)會(huì)綁定自己的回調(diào)地址和密鑰。推送邏輯用簡(jiǎn)單重試策略第一次推送失敗后間隔5秒、30秒、2分鐘各重試一次最多4次。同時(shí)依賴數(shù)據(jù)庫里的notified字段判斷狀態(tài)推送成功置14次都失敗則保持0方便事后人工補(bǔ)推。重試過程中要特別注意消息冪等業(yè)務(wù)方的接收接口應(yīng)該按驗(yàn)證碼ID去重否則重試會(huì)導(dǎo)致業(yè)務(wù)處理兩次。4.3 接口簽名與安全防護(hù)平臺(tái)內(nèi)部自己用的時(shí)候可以不做簽名但一旦要暴露給多個(gè)業(yè)務(wù)方簽名認(rèn)證就必須加。我的實(shí)現(xiàn)是每個(gè)業(yè)務(wù)方分配一個(gè)app_id和app_secret調(diào)用查詢接口時(shí)請(qǐng)求頭帶上X-App-Id和X-Timestamp同時(shí)用app_secret對(duì)請(qǐng)求參數(shù)做HMAC-SHA256得到一個(gè)X-Signature頭。服務(wù)端用相同方式計(jì)算簽名并對(duì)比同時(shí)檢查時(shí)間戳超過5分鐘視為過期請(qǐng)求。這個(gè)設(shè)計(jì)主要防兩件事一是防止接口被未授權(quán)的第三方調(diào)用二是防止請(qǐng)求被截獲后重放。時(shí)間戳校驗(yàn)就是防重放的因?yàn)轵?yàn)證碼數(shù)據(jù)本身敏感接口暴露在公網(wǎng)被亂抓就麻煩了。除了簽名我還在Nginx層加了IP白名單和限流雙保險(xiǎn)。5. 管理后臺(tái)與可視化查詢5.1 后臺(tái)頁面功能清單管理后臺(tái)我用的是一個(gè)很樸素的思路一個(gè)HTML頁面 一個(gè)查詢接口不做復(fù)雜前端框架。頁面功能就這么幾個(gè)按手機(jī)號(hào)查詢輸入手機(jī)號(hào)展示該號(hào)碼最近接收的驗(yàn)證碼記錄。按時(shí)間篩選默認(rèn)顯示最近30分鐘可切換1小時(shí)、24小時(shí)。標(biāo)記已使用每條記錄旁邊有個(gè)按鈕手動(dòng)把狀態(tài)改成已使用。查看原文點(diǎn)擊展開查看完整的短信原文和原始回調(diào)數(shù)據(jù)。后臺(tái)不需要做登錄注冊(cè)一個(gè)簡(jiǎn)單的Token校驗(yàn)就夠了部署在內(nèi)網(wǎng)最省事。如果非要暴露公網(wǎng)建議在Nginx層加HTTP Basic Auth多一層保險(xiǎn)。5.2 查詢操作與交互細(xì)節(jié)后臺(tái)的交互細(xì)節(jié)比很多人想象的重要。我踩過幾個(gè)坑驗(yàn)證碼列表默認(rèn)按接收時(shí)間倒序排這個(gè)必須做到否則你看到的第一條不是最新的會(huì)被誤判每條記錄要顯示接收時(shí)間的時(shí)區(qū)這個(gè)也必須有不然對(duì)不上時(shí)間線已使用的驗(yàn)證碼要有明顯的視覺區(qū)分我用了灰色標(biāo)簽避免誤用。另一個(gè)小細(xì)節(jié)是查詢結(jié)果里要把驗(yàn)證碼單獨(dú)列出來加粗顯示不要混在短信原文里面。因?yàn)闇y(cè)試人員在實(shí)際操作時(shí)是要把驗(yàn)證碼復(fù)制出去的他們不會(huì)去看原文。后臺(tái)頁面雖然簡(jiǎn)單但要圍繞“快速找到驗(yàn)證碼”這個(gè)核心目標(biāo)來設(shè)計(jì)其他花里胡哨的功能都是干擾。6. 部署上線與穩(wěn)定性優(yōu)化6.1 Docker Compose 一鍵部署部署方式我推薦Docker Compose一條命令起全套省去環(huán)境搭建的麻煩。目錄結(jié)構(gòu)如下sms-platform/ ├── app/ │ ├── main.py │ ├── webhook.py │ ├── query_api.py │ ├── database.py │ ├── models.py │ └── requirements.txt ├── Dockerfile ├── docker-compose.yml └── data/ └── sms.dbdocker-compose.yml里只需要兩個(gè)服務(wù)一個(gè)FastAPI應(yīng)用一個(gè)Redis。SQLite數(shù)據(jù)庫文件通過volume掛載到宿主機(jī)方便備份。內(nèi)容如下# docker-compose.yml version: 3.8 services: redis: image: redis:7-alpine container_name: sms-redis restart: always ports: - 6379:6379 app: build: . container_name: sms-platform restart: always ports: - 8000:8000 environment: - REDIS_URLredis://redis:6379/0 - DATABASE_PATH/app/data/sms.db - TOKENyour_admin_token volumes: - ./data:/app/data depends_on: - redis啟動(dòng)命令就是docker compose up -d --build訪問http://服務(wù)器IP:8000/docs就能看到FastAPI自動(dòng)生成的接口文檔管理后臺(tái)頁面放在http://服務(wù)器IP:8000/admin。6.2 關(guān)鍵配置項(xiàng)說明配置項(xiàng)的坑主要集中在環(huán)境變量上。我強(qiáng)烈建議把所有可變參數(shù)都抽到環(huán)境變量里不要在代碼里硬編碼。關(guān)鍵配置有這么幾個(gè)環(huán)境變量默認(rèn)值說明REDIS_URLredis://localhost:6379/0Redis連接串DATABASE_PATH./sms.dbSQLite數(shù)據(jù)庫文件路徑TOKENadmin123管理后臺(tái)訪問TokenWEBHOOK_SECRET空回調(diào)接口驗(yàn)簽密鑰CODE_TTL_SECONDS300驗(yàn)證碼有效期秒數(shù)這些配置看起來簡(jiǎn)單但每一項(xiàng)都在生產(chǎn)環(huán)境里坑過我。比如DATABASE_PATH容器里如果不掛載volume重啟一下數(shù)據(jù)庫就沒了數(shù)據(jù)全丟。再比如CODE_TTL_SECONDS剛開始寫死5分鐘后來業(yè)務(wù)方要求改成10分鐘改代碼重新部署太麻煩抽成環(huán)境變量一行就搞定。6.3 穩(wěn)定性監(jiān)控與告警平臺(tái)穩(wěn)定性監(jiān)控一開始我覺得沒有必要反正就是個(gè)內(nèi)部工具。直到有一次云短信服務(wù)商回調(diào)突然斷了一個(gè)多小時(shí)我完全沒察覺業(yè)務(wù)方找過來才發(fā)現(xiàn)。從那以后我加了三層監(jiān)控第一層心跳接口。加一個(gè)/healthz返回?cái)?shù)據(jù)庫和Redis的連接狀態(tài)配合云監(jiān)控平臺(tái)做探活掛了自動(dòng)告警。第二層數(shù)據(jù)量監(jiān)控。每分鐘統(tǒng)計(jì)接收的驗(yàn)證碼數(shù)量寫入日志如果一段時(shí)間內(nèi)數(shù)量驟降為0大概率是回調(diào)鏈路出問題了。第三層推送失敗告警。如果通知業(yè)務(wù)方的notified字段長(zhǎng)時(shí)間保持0說明推送鏈路有異常需要人工介入。這三層監(jiān)控不需要專門搭一個(gè)監(jiān)控系統(tǒng)最簡(jiǎn)陋的做法就是寫幾個(gè)腳本定時(shí)跑發(fā)現(xiàn)問題往企業(yè)微信或釘釘群發(fā)個(gè)消息。監(jiān)控的核心是“能發(fā)現(xiàn)問題”而不是“用什么工具發(fā)現(xiàn)”。7. 常見問題與排查技巧實(shí)錄7.1 收不到驗(yàn)證碼短信這是最常遇到的問題一上來懷疑云短信服務(wù)商有問題其實(shí)大半是本地配置問題。按照我排查的經(jīng)驗(yàn)順序應(yīng)該是先看回調(diào)日志有沒有請(qǐng)求進(jìn)來沒有請(qǐng)求就說明回調(diào)地址沒配置對(duì)或者服務(wù)商那邊根本沒把短信發(fā)出去有請(qǐng)求但入庫失敗就看是不是驗(yàn)簽沒過、字段解析失敗入庫成功但查詢不到就看是不是狀態(tài)被提前改成已使用或者Redis和SQLite的過期時(shí)間不一致。這一套排查下來絕大多數(shù)收不到短信的問題都能定位。千萬注意不要跳過看日志這一步去猜原因回調(diào)日志是你排查的第一手資料必須保留。7.2 回調(diào)超時(shí)或重復(fù)推送云短信服務(wù)商的回調(diào)是有超時(shí)時(shí)間的一般3到5秒。如果你的回調(diào)接口里做了耗時(shí)操作比如同步推送通知響應(yīng)慢了服務(wù)商就會(huì)重推造成同一個(gè)驗(yàn)證碼入庫多條記錄。這個(gè)問題根因就是入庫邏輯里沒做冪等。解決辦法有兩個(gè)層面第一入庫前檢查手機(jī)號(hào)加驗(yàn)證碼加接收時(shí)間的唯一索引重復(fù)的直接忽略第二把耗時(shí)操作移出回調(diào)請(qǐng)求鏈路異步執(zhí)行。兩件事都做了重復(fù)推送的問題基本絕跡。另外還要注意即使做了冪等日志里也要保留每次回調(diào)的原始記錄方便核對(duì)。7.3 驗(yàn)證碼亂碼或解析失敗驗(yàn)證碼解析失敗通常出現(xiàn)在GSM模塊方案里云回調(diào)方案很少見。GSM模塊收到的短信內(nèi)容會(huì)受編碼影響常見的情況是中文短信內(nèi)容變成亂碼但驗(yàn)證碼是數(shù)字所以還能提取出來。如果連數(shù)字都解析不了大概率是短信內(nèi)容里驗(yàn)證碼格式不是純連續(xù)數(shù)字比如驗(yàn)證碼為 1 2 3 4 5 6中間有空格正則匹配就失敗。我的處理方案是用兩步提取第一優(yōu)先用正則匹配連續(xù)數(shù)字第二如果匹配不到就按常見關(guān)鍵詞切分取關(guān)鍵詞后面的字段再清除非數(shù)字字符。這個(gè)兜底邏輯不完美但應(yīng)付常見格式足夠了。另外GSM模塊方案里的AT指令解析也有編碼坑串口默認(rèn)可能是7-bit或8-bit模式要按SIM卡的字符集調(diào)整否則中文必亂。7.4 時(shí)區(qū)與過期時(shí)間坑時(shí)區(qū)問題是那種“看起來沒問題跑起來全是問題”的隱藏坑。FastAPI默認(rèn)用的是服務(wù)器本地時(shí)間如果你服務(wù)器是UTC時(shí)區(qū)而你和業(yè)務(wù)方都在東八區(qū)那么你存的created_at和業(yè)務(wù)方看到的時(shí)間就對(duì)不上。我吃過這個(gè)虧排查了半天才發(fā)現(xiàn)是時(shí)區(qū)偏移。統(tǒng)一方案是服務(wù)器統(tǒng)一設(shè)置成Asia/Shanghai所有時(shí)間字段存儲(chǔ)和展示都用東八區(qū)時(shí)間。在Docker環(huán)境里需要在啟動(dòng)命令里加-e TZAsia/Shanghai同時(shí)代碼里也強(qiáng)制指定雙保險(xiǎn)。過期時(shí)間的計(jì)算也基于東八區(qū)時(shí)間不要混用UTC和本地時(shí)間否則驗(yàn)證碼明明沒過期卻顯示過期查起來特別抓狂。8. 合規(guī)邊界與我的個(gè)人體會(huì)8.1 合規(guī)使用場(chǎng)景提醒這個(gè)平臺(tái)本身是開發(fā)工具但它接收的是短信驗(yàn)證碼這種敏感信息所以使用邊界一定要講清楚。合法的場(chǎng)景是你自己業(yè)務(wù)系統(tǒng)里的測(cè)試號(hào)碼回調(diào)、你開發(fā)的自動(dòng)化測(cè)試腳本、你自建的短信網(wǎng)關(guān)監(jiān)控。一句話總結(jié)就是平臺(tái)只能接收你自己能合法接收的短信不能用于繞過實(shí)名認(rèn)證、批量注冊(cè)、惡意薅羊毛等違法違規(guī)場(chǎng)景。另外如果平臺(tái)里存儲(chǔ)了真實(shí)的手機(jī)號(hào)和短信內(nèi)容要注意隱私保護(hù)。至少要做到三點(diǎn)數(shù)據(jù)庫文件權(quán)限收緊、管理后臺(tái)訪問加認(rèn)證、日志脫敏處理。不要覺得內(nèi)部工具就無所謂數(shù)據(jù)安全這根弦任何時(shí)候都不能松。8.2 個(gè)人實(shí)操體會(huì)這套平臺(tái)前前后后改了三版第一版只是簡(jiǎn)單把回調(diào)存進(jìn)數(shù)據(jù)庫第二版加了查詢接口第三版才補(bǔ)上Redis緩存、通知推送、簽名認(rèn)證。每一次改動(dòng)都是被真實(shí)場(chǎng)景逼出來的不是一開始就設(shè)計(jì)好的。所以我特別建議你第一次搭的時(shí)候先跑通最小閉環(huán)不要貪大求全后面遇到具體需求再迭代加功能。如果要擴(kuò)展這個(gè)平臺(tái)可以考慮的方向有驗(yàn)證碼識(shí)別接入OCR模型自動(dòng)識(shí)別短信驗(yàn)證碼圖片多租戶支持給不同業(yè)務(wù)方分配獨(dú)立密鑰和存儲(chǔ)隔離監(jiān)控?cái)?shù)據(jù)可視化。但這些都屬于錦上添花核心鏈路反而是多多打磨細(xì)節(jié)——驗(yàn)簽、冪等、過期、防重、監(jiān)控把這些做到位平臺(tái)才能真正扛得住生產(chǎn)環(huán)境的折騰。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚欧美综合网。| 成人夜夜| 国产亚洲日韩在线三区黑人| yazhououmeizongya| 丁香五月社区| 久久久麻豆精品| 人妻天堂网| 91新在线欧美| 日本99久久| 操操逼视频| 欧美综合色综合| 九九无码久久精品视频| 亚欧高清在线| 少妇滛荡视频| 成人毛片免费| 六月丁香网| 亚洲天堂东京热| 亚洲综合色婷婷| 无码精品久久| 91亚洲综合在线| 9精品在线| 久久久九九网站| 男女做爰猛烈动高潮A片免费应用| 骚女高跟AV在线| 欧美综合站| 成人无码在线超碰网| 色九九久九九| 国产青青综合伊人| 色在线69堂| 一色网男人的天堂| 精品久久視頻在线| 欧美后进式| 亚洲在线欧美| 欧美日韩狠狠爱| 免费成人在线熟妇网| 一道本东京热加勒比一区二区三区| 极品美女福利在线观看| 国产免a费看黄片在线| 男人天堂东京热| 日日爽熟女| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 中文有码9| 黄色大片一区二区密桃丝袜| 亚洲精品色| 精品国产肉丝袜在线拍国语| 欧美成人黄网色网站| 日本三级A片网站com| 中文字幕后石码三区四区| 欧成人精品一区二区三区| 日韩二区三四区五区六区在线看| 欧美性天天影院| 99黄页网站| 97人亚洲综合字幕| 美女AV一区二区| 久久侵犯人妻爽爽爽| 成人三级片无码| 99re国产精品视频| 久久久久九九九| 3D污黄视频在线观看| 激情国产乱伦Av| 看免费的黄片| 午夜电影在线观看无码专区| 色一色综合网| 极品色社| 天天操天天看| 美女久久久久久久久久久| 试看福利| 啪啪啪男女亚洲中文字幕99| 久艹免费| 日韩中文字幕视频| 丰满人妻大屁一区二区| 亚洲色五月| www.婷婷| 国产精品91一样| 亚洲中文制服诱惑| 夜夜夜夜久久久久| 中文字幕,人妻,日韩| 天天懆天天日| 国产小u女在线观看| 亚洲天天艹| 九九十八精品| 四虎精品一区| 99国产精品| 中国少妇XXXX做受| 欧美亚洲| 亚洲18禁| 国产精品久久久久久夜夜夜夜| 9九九国产| 4虎在线观看| 三级日韩一区二区三区| 亚洲精品精品一区二区| 青青草伊人久久| 亚洲999综合| 亚洲天堂2020| 人人看欧美性爱| 天天干天天插| 欧美国产有色电影| 日本高清视频xxxx| 天天综合91在线| 欧美日韩另类字幕中文| 男人天堂东京热| 五十路六十路素人熟女| 人妻加勒比东京热| 精品久操| 亚洲国产一区二区入口| 免费看污网站| 九九九九九九九九九国产精品| 91在线免费精品视频| 成人性爱全视频观看| 秋霞男人网| 天天爱综合网| 青青操综合网| 97中文字幕色| 亚洲伊人成综合成人网| 中文字幕日韩综合| 97在线观看免费| 亚洲黄色视频在线观看视频| 黑人黄片在线免费观看| 少妇熟女一区二区三区| 欧美日韩夜夜| 日韩三级伦理中文字幕| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲情色91| 久久99手机免费视频| 九色黄站| 亚洲综合色男人网| 96国产精品| 国产av又色又爽又黄| 国产四虎在线| 夜夜精品视频| 大鸡吧尹人在线| 丰满人妻一区二区三区免费 | 亚洲中文制服诱惑| 欧美人妻少妇| 国产日韩精品一区二区三区| 国产精品久久久久久亚洲色欲| 亚欧成人综合影院| 伦在线97| 久久精品欧美一区二区三区不卡| 国产黄色动态精品| 国产日韩欧美中文在线播放| 久久亚洲一区女同性恋中文字幕| 妺妺跟我一起洗澡没忍住| AV久日| 鸡巴插逼视频| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 精品综合久久久久久97| 97天堂| AV有码在线| 日日干日日| 偷拍 亚洲 欧美| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产日韩精品无码去免费专区国产| 大香蕉宗合网在线| 人妻色偷色噜| 亚洲国产精品久久久男人的天堂| 欧美不卡五十路| 亚洲欧美色综合| 天天谢天天干| 人妻素股| 丰满人妻-区二区三区免费| 亚春色色| 1禁看欧美黄片免费看| 美女主播色欲91抠b在线播放| 青娱乐999| 91人妻视频| 美女极品一区二区三区| 9久9久9久9久视频网站| 美国美女AV在线| 99久久精品无码一区二区毛片免费 | 99热这里只有精| 96精品久久久久久久久久| 按摩中文字幕| 激情综合网五月婷婷五月天| 国产日韩手机视频在线| 超碰色大香蕉| 亚洲污污网站| 97超级久久强资源| 操操操日本的逼| 亚洲高清91| 97精彩视频网站| 东京热男人的天堂精品| 久久系列| 骚女高跟AV在线| 狠狠色婷婷| 国产精品久久久无码aV去| 一区二区三区在线日韩影院观看| 中文字日本乱码| 欧美午夜视频免费观看| 极品色综合| 又黄又粗又硬又长又大| 亚洲午夜免费狠狠干| 亚洲密乳AV| 久久精品人妻一区二区三区| 91天美传媒在线观看| 激情深爱五月天| 国产最新小视频在线播放下载| 公司1区2区3区精产精| 丝袜性亚洲| 97自拍视频在线| 国产av激情无码久久天堂| 欧美亚洲天天| 日本 情色 1区2区3区| 无码视频一区二区| 超碰97在线 欧美 国产| 亚洲精品色| 中文字幕成人| 久久99网站| 老熟妇一区二区三区…| 最新日本中文字幕| 精品人妻一区二区三区四区不卡在| 青青草国产一区二区三区| 91美女视屏| 色妺妺在线视频| 九九人人操| 狠狠操天天干| 久久欧美按摩999| 99色色网| 丁香五月婷婷啪啪| 制服乱伦| 日韩操人| 亚洲五月丁香花狠狠干一区二区三区| 日韩精品一区二区三区色欲 | 综合色99| 色色色综合| 国产精品亚洲免费| 97色冈| 九一亚洲国产免费| 欧美三级免费伊人| 久久111| 国产成自自拍在线观看| 无码操逼天堂| 欧美亚洲中文字幕| 久久久久99精品成人片蜜臀| 欧美碰碰综合色| 97久久国产| 97爱综合| 国产亚洲精品无码三区| 日本免费中文字幕在线| 日韩乱伦视频| 99热伊人| 91色黑人少妇| 内射黑丝袜| 深夜激情| 神马久久久久| 欧美A片中文字幕| 国产家庭乱伦性爱视频| 色噜噜人妻丝袜a∨先锋影| AV在线性爱| 日本一级二级三级网站| 国产欧美美女免费观看视频| 欧美色图亚州激情| 男人精品天堂一区| 麻豆亚洲AV成人无码久久精品| 东京太热男人的天堂久久久| 1769国内精品视频| 女色视频社区| 亚洲青色欧美| 清纯唯美激情| 啪啪AV导航| 曰韩无码777| 欧插网站| 中文字幕一区二区三区四五区| 亚洲欧美第一页| 性爱视频无打码在线观看| 国产午夜激片Av毛片不卡| 91狠狠综合久久| 丁香五月天久久精品视频一区二区三区| 亚洲宗合网| 啊啊啊啊网站| 97人妻免费中文字幕| 韩日精品四区| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 亚洲永久AV无码精品秋霞| 乱老熟女一区二区三区| 久热这里只有精品9| 三级精品三级在线观看| 色婷婷丁香五月| 欧美精品 - 91爱爱| 粉嫩久久久极品| 蜜臀一区二区三区在线| 丁香五月自拍| 丰满少妇精品一区二区| 中文字幕一区二区日韩网| 五月婷婷激情| 亚洲欧美综合图片| 99精品久久久久久久婷婷| 清纯唯美激情| 黄色av一区二区在线| 久久夜夜夜夜| 欧洲亚洲国产综合在线| 天天看片天天爽| 亚洲综合色图欧美| 在线观看色视频| 日韩精品人妻中文字幕有码午| 久久久啊啊啊| 欧亚免费视频| 久草电影网| 久久久久国产精品喷潮免费观看臀| 淫色网综合| 人人干黄色| 色色色日本| 免费观看欧美日韩操逼视频| 色婷婷综合久久久久中文一区二区| 91色色综合| 北约熟女超碰| 夜夜夜夜爽| 乱伦图av| 操老熟女AV| 黄色片A级一区二区三区| 久久久久久久少妇| 免费中文综合精品| 丝袜综合| 午夜AV人气不卡| 国产精品网站www| 91夜色| 97人肏| 丝袜美腿亚洲| 亚洲免费97免费| 国产精品熟女一区二区三区| 91久久精品国产| 屁股久久久久久久久久| 99日精品欧美国产| 97视频免费在线观看| 国产超碰国产97| 麻豆视频国产一区二区| 欧美高潮| 国产午夜无码片在线观看影视| 日产中文字幕2020| 97在线精品| 欧美丰满熟妇XXXX性ppX人交| 久久久久久精品免费看A级| 国产又粗又长又爽又色| 亚洲日韩成人性爱视频| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 中文字幕天天天天天| 99操| 偷拍亚洲情色| 亚州一区二区| 91精品女厕偷拍视频| 亚洲操逼无码| 青青欧美在线| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 亚洲91射| 2024年最新色情网站在线观看 | 中文字幕免费看| 中国91AV| 视频一区二区免费在线| 人妻丝袜美腿中文字幕| 精品无码欧美三级| 免费av在线播放二区| 亚洲最大的综合性av| 成人八戒网站| 69超碰综合| 91爱看| 高精欧美色| 100啪啪视频大全| 多乙久久久久久| 美女黄色一级A视频| www.男人天堂| 99无码| 亚洲国产ⅴ高清在线观看| 五月丁香啪啪网| 婷婷香蕉欧美在线一区二区三区| 久草在| 久久系列| 九九黄色网| 黄呦呦在线| 97在线无精品| 欧美人黑A片无码免视费| 强奸乱伦大香蕉网| 九X超碰| 精品美女少妇一区二区| 无码精品一区二区三区潘金莲| julia高潮后不停追击中出| 一牛一区二区三区久久| 九九九九精| 在线观看AV片| 日本一天色道久久久精品视频| 中文字幕人妻丝袜乱一区三区| 亚洲国产成人7777| 91天天日| 78超碰| 九九AV| 久久精品无码不卡| 啪啪资源网| 国产13区| 操国产逼| 狠狠狠一区二区三区| 日韩无码服务区| 日本操大逼| yazhousetuoumei| 少妇高潮九九九九| 日本福利二区视频| 久久久久久99999国产精品| 啪啪视频亚洲第一| 欧美视频激情久久久久久| 亚洲伊人成综合成人网| 激情四射婷婷四五月天| 97亚洲综合电影| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 日逼97| 最新国产精品久久精品| 欧美人妻熟女在线| 开心婷婷五月| 96麻豆精品一区二区三区| av凤凰久久久| 久久久九九| 国产一区二区欧美日本| 热热色综合网| 另类在线| 色综合av综合久久| 精品久久久久黄少妇| 亚欧高清| 亚拍在线| 超碰九色| 夜色91| 国产自产91区13区| 亚洲精品白浆高清久久久久久| 亚洲aw毛茸茸在线| 一级@啪啪视频| 亚洲欧美setu| 精品成人av一区二区三区在线| 四虎精品永久在线观看| 中文字幕在线观看丝袜| 日本淫乱女一区二区三区视频| 91在线免费观看处女| 翔田千里A片一区二区| 久久精品72| 影音先锋视频在线| 嗯嗯啊啊的视频| 大香蕉丝袜一级片| 国产精品懂色tv影视免费观看| 色婷婷蜜臀av| 日本国产欧美高清在线| 97日亚洲欧美| 啊啊啊啊二区好大| 中文久久爆乳| 久草精品国产99| 欧美综合网1| 欧美一级A片在线看视频性色| 99夜夜操| 九九九网页| 性爱边摸边日免费AV| 国产国产亚洲一二三久久| AV天天在线观看| 国产专区第一页| 精品少妇高潮久久| 国产按摩一区二区三区| 美女操逼福利视频| 97综合网| 亚洲少妇自拍中文字幕懂色| 国内精品999| 国产综合网站在线播放 | 国产亚洲精品自在线亚洲情侣| 亚洲动态色图| 日本精品九九九| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 久久在肏| 玖玖爱一区在线| 九九香蕉网| 日本免费中文字幕在线| 大香蕉伊人网| 伊人网在线观看| 丁香六月激情| 亚洲欧美日韩制服另类| 午夜精品久久久久久久99| 99精彩视频| 国产女人和拘做爰视频 | 久久久久久久久久久久黄色| 五月综合激情网| 亚洲av影音先锋| 思思久热在线精品66| 九九九成人| 好屌色综合| 九九十八精品| 无码人妻一区二区一牛影视| 妺妺跟我一起洗澡没忍住| 国产精品久久久久久久AV大片| 人妻丝袜一区二区三区在线| 亚洲国产97在线精品一区| 嗯嗯,好大,好爽,好骚 | 丁香五月综合| 99国产精品视频尤物| 精品无码欧美三级| 亚洲综合第一页| 密臀在线视频| 极品美女嘿咻| 偷拍亚洲视频一区二区三区四区| A男人的天堂| 97超碰巨乳| 人妻社区男人天堂| 美女的肌被草喷水视频| 第二页中文字幕| 麻豆天美电影一区二区| 91一区二区| 亚洲五月婷| 中文字幕一区日韩精| 强奸乱伦日韩AV| 久久久国产亚洲精品系列| 高潮的A片激情扒开一区| 国产日韩无码一区二区三区久久区| 亚洲熟女诱惑| 色汉综合| 欧美色图20p| 97香蕉网| 国产精品视频自拍在线| 亚欧免费| 日本视频在线观看污污污| 日本精品无码三级网站| 欧美精品一区二区少妇免费A片| 91精品国产91久久福利| 日本性交操一区二区不卡系列| 日本潮催一卡操| 丰满美女一级毛片在线播放| 精品国产一区二区三区四区在线看| gogogo免费高清看中国国语| 久操视频资源站公开| 中文字幕免费看大片| 日韩精品 视频一区二区| 乱伦3P视频| 97人人草| 成人综合网 欧美| 九九九久久久久| 一区二区亚州激情久婷婷欧美| 91天天综合在线观看| 久久久久白虎| 特级特黄一级毛片免费| 五月天婷婷在线看| 黄片直播三级黄片两女一男| 国产玖玖| 色网在线| 免费在线视频97| 在线播放成人高清免费视频| 国产熟女免费观看久久| 日本超碰在线国产一区| 欧洲一区二区三区免费| 久久夜夜夜| 亚洲精品国产拍免费91在线| 26uuu久久| 亚洲天堂7777| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 色噜噜综合网| 亚洲av热热色| 夜夜夜夜久久久久| 亚洲成人性爱网站在线播放| 丁香五月婷婷啪啪| 久久久久久波多野吉衣高潮| 天天操天天干美女网址导航| 亚洲AV无码乱码| 国产 日韩 另类 视频一区爱| 久久香蕉综合一本到3atv| 免费看毛片操穴| 婷婷五月天久久精品视频一区二区三区| 亚洲综合校园春色| 国产精品懂色tv影视免费观看| 中国AV美女| 人人爱操| 久久97超碰香蕉| 天天综合91| 亚洲福利中文字幕在线| 又黄又粗又硬又长又大| 高清孕妇孕交 交| 国模不卡| 殴美,日韩国产伦精品| 超碰视97中文| 三级激情网站| 艾草av| 自拍六区| 亚洲AV永久无码一区仙野| 亚洲97P| 久久久新亚洲AV| 开心五月婷婷激情| 伊人在线大香蕉二。| www久久国产精品| 成人欧美一区二区三区黑人一| 日本孕妇孕交| 乱伦一区二区三区‘| 青草青青久久久久久国产| 96精品久久久| 亚洲一欧洲中文字幕在线| 丝袜综合| 亚洲国产精品成人综合| 97玖玖人妻| 国产97视频| 六月婷婷色综合| 精品熟妇视频一区二区| 操逼视频免费日韩无码| 人妻内射一区二区在线视频| ,成人免费啪啪视频| 91扒丝袜综合在线| 另类一区| 最新日本中文字幕| 99久久精品国产高潮| 日本美女性生活久久久久久久| 欧美综合综合| 日本午夜久久电影| 东京热,男人的天堂| 性做久久久久久免费观看软件| 一区二区三区四区在线不卡| 日本无码1| 综合色拍| 精品亚洲国产成人av网站| 欧美999999| av网站国产主播在线| 亚州成人A√| 91社区伊人| 精品乱子一区二区三区99| 日韩字幕一区| 亚洲精品蜜桃久久久久久久| 人人爱人人操人人性| 久久风骚城市| 五月大香蕉| 97天堂| 超碰97资源大奶| 免费福利视频中文字幕| 男人的天堂久久狠| 97精品综合久久| 国产又大又粗又长视频| 丁香五月电影| 国产91美女视频| 天天做日日做天天欢。| 视频二区美腿制服人妻欧美| 色综合一区二区三巨| 五月丁香黄色网| 欧美A√综合网| 午夜理论片在线观看免费| 蜜桃传媒视频第一区入口在线看| 久久一二三四五六七八九区区区| 人妻9117c| 欧美 综合 亚洲| 色婷婷综合视频| 日韩肏逼视频| 亚洲欧美日韩中文久久自慰| 亚洲制服欧美另类内射| 亚洲综合第一页| 青青操在线亚洲视频观看欧美在线| av日韩手机在线影视| 色九久| 极品后入免费视频| 五月天婷婷综合网| 黑人美精品 A片| 91久| 中文字幕文字幕无码一区二区三区电影99| 久久久精品无码亚免费| 亚春色色| 欧美 牲| www.婷婷六月天| 日日噜噜夜夜狠狠视频无| 国产9熟妇视频网站| 18岁禁 茉莉成人久久| 精品国产片亚洲一区| 韩三级a视频在线观看| 久久日韩肥臀| 嫩草影院永久在线制服丝袜| 亚洲人妻一区二区三区| 久操视频资源站公开| 一级毛片电影免费看| 国产人妻一区二区三区欧美毛片| 九九热九九| 天天操天天射天天日| 骚女天天综合网| 天美传媒av一区二区| 精品国产网站| 五月天啪啪| 精品在线观看视频在线| 国产强奸91| 日本不卡二区| 国产精品乱码久久久| 中文字幕二区| 伊人操操| 欧美天天综| 欧美男女午夜啪啪| 色婷婷丁香五月| 999国产精品999| 做爱A级亚欧| 强奸抽插av| 久久精品导航| 久热精品在线| 亚洲色图 综合| 天堂在线一区二区| 综合久欧洲| 欧美精品在线观看| 欧美人妻精品| http://qxhbdz.com| 99视频内射三四| 亚洲日韩美女中文字幕乱| 懂色中文一区二区三区| 国产午夜在线观看| 人人搞人人插人人操| 99人妻| 综合网91| 日本布卡一区二三区| 亚洲国产一级中文综合久久天堂在线免费观看| 日韩在线视频1234| 啊啊啊com| 久久不卡一区二区| 第二页中文字幕| 日本免费一区二| 久久爽爽精品| 99色在线| 国产精品扒开腿做爽爽爽视频| 亚洲欧美第一页| 国产AAAAAABBBBB| 最新岛国大片| 国产91久久九九免费精品无码| 综合色图区| 嗯嗯嗯嗯啊啊啊好紧好大| 亚射在线| 色777999综合| 91中文字幕| 欧美精品一区二区少妇免费A片 | 熟女少妇一区二区三区| 97在线视频免费| 伊人丁香五月婷婷| 综合久久欧美| 久久天天性久久伊人| 久久久久久久久久黄色网| 色哟哟精品1精品2| 蜜臀久久99精品久久久久久-DVD原版全| 午夜小电影在线插入淫高潮| 乱伦Av网| 久久秀这里有精品| 97网址97| 欧美精品宗合| 黑人无码一区二区| 久久久久久大| 亚洲色图第四色| 成人线上超碰| 99久久精品国产高潮| 亚州操操穴网| 91视频女生| 日韩性爱一级片| 久久东京国产精品视频| 中文字幕乱碼在线| 视频二区美腿制服人妻欧美| 中文字幕日韩精品久久| 亚洲综合另类| 亚州大图综合色图| 1000部熟女视频在线观看| 极品尤物在线观看| 大香蕉男人的天堂| 色吧91| 性做久久久久久免费观看软件| 欧美性,亚州色| 国产精品久久久久9999小说| 91精品久久久久五月天精品| 免费观看有码高清视频| 制服中出中文人人精品| 国产一区二区二区按摩精品啪视频| 亚洲成人久久一区二区| 超碰天天久久79| 日本色日夜干| 国产亚洲精品自在线亚洲情侣| 人妻 欧美 中文| 97国产精品| 色噜噜狠狠色综无码久久合欧美| 91美女国产在线| 91影库| 久插综合| 精品一区二区三区国产| 99这里有精品视频| 18精品一二区| 思思热免费视频观看| 欧美在线视频播放| 午夜.DJ高清在线观看免费7| 日韩欧亚太美不卡| 麻豆天美传媒毛片| 亚洲人妻一区二区三区| 久热这里只有精品9| 全球成人中文在线| 东京热大香焦| 无码操逼网| 亚洲人妖网| 91av一区二区在线观看| 爱欲AV| 色视频蜜乳| 99爱久久视频频| 放黄片放3级黄片没穿衣服| 久久黄黄| 国产三级日产三级韩国三级| 亚洲欧洲无码bt精品合集| 超碰超碰95| 亚洲97在线观看| 成人资源中文字幕在线观看天天| 九久久精| 婷婷爱五月| 亚洲欧美黄| 91 手机在线播放 绯色| 久久精品一区二区| 偷拍网站久久男女男| 91综合色噜噜| 久久久久久大| 91精品微拍福利| 蜜桃视频一区二区三区| 操操操日本的逼| 久久五月天婷婷丁香中文字幕| 日产国产精品中文久久婷婷| 一本色道无码DVD中文字幕| 精品无码一区二区| 亚洲AV麻豆Aⅴ无码电影一| 一区二区三区日韩欧美 | 久久久久大香青草精品综合| 亚洲成人免费中文字幕| 性九九九九九九| 婷婷AV一区二区三区| 97视频播放| 国产成人资源| 大香蕉www.超碰| 日本高清一本二本免费不卡| 亚洲宅男天堂| 国产精品久久aV| 久久熟女久| 丁香婷婷大香蕉| 97免费在线视频| 国产成人主播| 亚洲av无码成人精品国产| 夜夜欢天天干| 中国黑人三级片网站上区| 久久精品店| 另类图片天天影视| 青青草啪啪网| 午夜免费福利视频一区| 日本操逼无码| 国产精品高朝久久久久久久| 国产在线76页| av网站在线观看了| 欧美综合天堂| 成人A片男人的天堂| 午夜操逼不卡| 欧美亚洲特P| 久久国99999| 成人在线日韩| 99国产在线 精品 视频| 熟妇人妻精品一区二区| 欧美日韩婷婷中文| 嗯嗯啊啊视频在线看| 超碰成人公开| 97香蕉网| 美女十八禁| 性色av一区二区| 天天影视网综合少妇| 亚洲成人美女无吗| 国产一级舔足在线观看| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 麻豆天美国美国产| 欧美 日韩 亚洲 春色| 精品人妻一区二区三区四区| 精品人妻一区二区乱码一区二区 | 眼镜人妻101.com| 久久久免费视频18| 欧美另类自拍 | 国产人妻天天干精品| 久96热在线观看视频| 96国产精品| 嫩草黄页| 欧美大片天天看| 无码一区二区三区四区五区六区七区八区九区十区视频 | 亚洲色图日韩丝袜制服一区二区五月在线| 国产熟女一区二区丰满| 2010男人的天堂| 欧美黄色大香蕉一区二区| 精品国产乱码| 国产成人在线观看网址| 麻豆一区二区AV天美| 亚州男人的天堂| 操穴国产| http://qxhbdz.com| 97色碰| 91人妻Pr| 国产激情在线| 欧美黄片欧美黄片xxx| 日本操逼视频不卡直接放| 97在线免费视频| 亚洲欧美伦综合| 夜夜嗨一区| 乱操9999| 久久久熟女一区| 97超碰色中文字幕| 啊嗯嗯啊好大好爽| 在线情色电影 91大 | 久久天天躁日日躁狠狠躁| 麻豆精品久久久久久久| 韩日精品四区| 激情婷婷五月天| 色色综合网站| 五月综合色| 国产亚洲一黄| 欧美暴力猛交| 免费黄色片子| 久热在线精品免费观看| 婷婷午夜成人色中色| 日本久久久久久久久| 人妻aa| yellow网站免费观看日韩高清无码| 色悠久| 国产精品香蕉| 欧州一区二区三区四区| 熟女激情综合网| 无码高清操逼网址| 91精品国产日韩欧美综合| 天天色,天天干,天天干| 亚洲中文日韩欧美大香蕉视频| 成人午夜小视频手机在线看| 殴美大黄片| 91精品久久久久久77777| 五月天色色色| 高凊专区人人操| 亚洲成人精品久久久| 熟女高潮合集-永久久久-成人AV | 色色综合网站| 久久五月份| 日韩AV一区二区三区三州三州| 久草精品国产蜜臀| 日日噜噜夜夜久久亚洲一区二区| 色偷偷超碰亚洲| 欧洲精品二区| 亚洲 欧美 日韩 国产一区二区| www.yeyecao| av天堂手机版追回| 夜夜中出国产| 欧美97视频| 日本免费二区三区| 日韩三级伦理中文字幕| 十八岁啪啪视频免费看| 人妻中文在线| 精品十三区| 91久热| 欧美18老人禁| 久久‘黄片视频| 国内精品999| 欧美综合网1| 欧美色另类| 日韩熟女操逼| 97久久超碰| 75大香蕉| 欧美高清16| 一级片在线观看高清无码| 在线播放成人网站| 啊啊啊啊啊好大好舒服想要| 国产伊人精品在线| 91深夜夜| 久久黄黄| 国产人妻精品一区二区三区秋霞 | 国产午夜福利合集| 一级性爱视频免费在线| 日本123区操B视频| 天天看人人操屄犊摸阴| 国产激情在线| 国产亚洲精品av一区| 中文字幕日韩综合| 十八禁电影伊人网| 激情小说日韩无码| 69人妻精品一区二区绯色| 很很很很操| 亚洲精品久久久久毛片A片拉屎 | 我爱大香蕉| 裸体美女久久久| 91麻豆天美| 女人爽到高潮潮喷18禁网站| 加勒比日本在线| 日本一区不卡| 激情久久久| 亚洲极品| av绯色| 亚洲AV高潮| 91 丝袜在线播放| 一区二区三区激情在线观看| 久久超碰98| 日本熟女不卡视频| 天天操av懂色| 日本欧美不卡| 91|九色|国产熟女| 欧美传媒一区| 国产精品黄色三级av| 九九九久千久久激情蜜桃在线看 | 超碰97日韩| 人人操人人摸人| 精品一区二区三区四区外站| 人人看黄色视频| 欧美精品人妻视频| 日韩欧美传媒一区国产| 99在线观看| 精品人妻15区| a在线观看| 久久久三区二区一区| 国产综合网站在线播放 | 日韩精品人妻一区二区| 色婷婷网| 性高潮久久久久久久久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 九九九九精品一区| 在线色导航| 天天澡天天爽日日av| 午夜.DJ高清在线观看免费7| 亚洲三级网址久久最新| 一级AV性爱| 啊啊啊啊二区好大| 巨爆乳一区二区爆乳区| 在线观看A啊啊啊| 国产操逼视频在线观看| 人妻人人澡人人爽人人| 日韩精品国产一区二区| 91老熟女老女人国产老太| 中文字幕一区二区在线日韩精品| 欧美A√综合网| 国产无马视频| 国产精品久久久久久久久久二区三区| 亚洲一区二区三区AV无码 | 国产AV天美| 日本三级一区二区 在线| 歐美性天天| 欧美性巨大╳╳╳╳╳高跟鞋| 99热日| 国产伦精品一区二区三区在线观| 精产品久久| 婷婷成人久久久精品| 香蕉国产精品麻豆亚洲欧美日韩 | 精品少妇一区二区三区免费观看| 日本精品一区二区三区四区的功能| 91逼逼女人91| 天天插夜夜操| 91老熟女91老女人| www色色com| 超碰午夜| 亚洲十八禁止| 日本狠狠干| 51国产午夜精品视频| 老司机午夜福利视频一区二区| 在线啊v一区| 999久久久| 国产日韩欧美| 激情五月天婷婷| 综合av社区| 欧美精品亚洲精品日韩传电影| 屌逼麻豆| 国产日产精品久久快鸭的功能介绍| 精品欧美日韩在线观看| 亚洲少妇喷视频看| 色就色综合| 精精品人妻一区二区三区| 国产精品久久久久久夜夜夜| 成人三一级一片aaa| 97超碰欧美手机| 国产成人天堂| 狠狠干综合| 艹精品| 妇女一区二区三区| 青青草国产盗摄一二三区| 99ri视频| 国产一级内射无挡观看| 97超碰欧美精品| 久久久专区| 中文字幕五区| 强奸乱伦Av网| 欧美v日韩v亚洲v最新在线| 91美女視頻| 嗯~啊~快点 死我视频| 伊人色综合网电影| 桃花色综合影院| 人妻少妇精品久久久久久| 91丝袜激情在线| 欧美第一页性| 男人的天堂一区三区| 91一区二区三区蜜桃| 96超碰网| 东京热大香焦| 久草色悠悠在线视频| 性爱视频久久| 国产精品无码论坛| 国产在线视频二区| 精品人妻一区二区三区日产| 色97综合中文字幕| 白丝少妇一区二区| 97香焦色区| 免费黄色视频网址| 欧美日韩精品一区二区三区高清| 一二三区操逼国产91| 外国免费性情大片| 玖玖大干人妻| 久日综合网| 欧美久久婷婷| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 99自拍视频在线| 人妻日日干| 中文字幕久热视频在线| 日韩特级毛片免费观看全集| 人妻丝袜二区| 亚欧美色图| 99热日| 欧美亚洲涩涩| 天操老女人| 91伊人大香蕉| 97香蕉人人乳| 国产一区二区三区不卡手机在线| 男人的天堂不卡一区二区| 亚洲国产一区二区三区四区国产| 欧美性爱中文字幕无线码| 高潮的A片激情扒开一区| 久久人人爽爽爽人久久久| 97操碰| 国产精品一级二级在线| 伦理弟一页| 五月天久久婷婷亚洲| 超碰97男人| 久久超碰97中文字幕| 亚州综合电影| 亚洲精品欧美专业| 啊啊啊啊啊啊啊国| 9/A片| 欧亚乱色熟一区二区三四区| 91亚州日韩高清| 欧美色偷拍| 97 亚洲 日韩 欧美 在线| 欧美中文字幕男人天堂久久精品 | 日本午夜操逼| 国产精品色片一区二区| 欧美黑人精品一区二区| 亚洲蜜桃V妇女| www.色操逼| 丁香五月久久| 欧美综合自拍成人自拍第二十页| 屌逼麻豆| 日本天天人人狠狠在线日美女| 少妇毛片久久| 欧美日韩国产电影| 日韩 欧美 国产 麻豆| 后入式五六区| 综合亚洲欧美| 青娱乐休闲视频在线观看| 国产无码久久高清| 青娱乐欧美激情一区二区| 日韩 欧美 另类 人妻| 欧美视频边做饭边橾| 五月天婷婷色色| 九九九九九九九九九九九免费国产| 91色图片| 色偷偷男人的天堂麻豆| 综合亚洲网| 成人国产视频在线观看| 精品国产一区二区三区在线播出| 亚洲成a人片在线观看中文!!!| 粉嫩av在线一区二区| 91精品综合久久久久久五月丁香| 精品网站9999| 涩涩久久精品| 欧美情色亚洲| 中文字幕第9页萱萱影音先锋| 欧美一区二区三区另类精品| 日本午夜福利影院| 麻豆黄色五月天| 97精品中文字幕| 久久东京热久久| 影视综合无码少妇| 丁香婷婷大香蕉| 日本A级视频| 偷窥自拍亚洲| 亚洲欧洲无码bt精品合集| 国产精品视频白浆免费| 天天操女人|