摘要:但是,不應(yīng)該啊我們是事先有做檢查的。一個請求成功返回,表示賬戶創(chuàng)建成功。自從年雙十一正式上線,累計處理了億錯誤事件,付費客戶有陽光保險核桃編程荔枝掌門對微脈青團社等眾多知名企業(yè)。
摘要: 通過分析用戶的行為,才想得到為什么會出現(xiàn)這種情況!
前兩天在BearyChat收到這樣的一個報警消息:
409 ?Conflict ? 平時很少遇到這樣的錯誤,貌似很嚴重的樣子,嚇得我趕緊查看到底發(fā)生了什么。
仔細查看錯誤詳情發(fā)現(xiàn)是因為使用同一個郵箱賬號多次注冊導(dǎo)致后面的請求數(shù)據(jù)庫直接報錯。
但是,不應(yīng)該??!我們是事先有做檢查的。如果該郵箱已經(jīng)被注冊,會提醒并且不讓注冊的。難道對方是個黑客,直接調(diào)用API發(fā)請求?如果是這樣那就更加危險了,我們已經(jīng)被黑客盯上了!
可是這樣做對黑客也沒什么好處啊,并且IP顯示為國內(nèi)地址,如果真的是黑客好歹用國外的地址吧。想了想,還是仔細分析到底出了什么問題吧。
再往下一看,發(fā)現(xiàn)自己完全是多想了。如果是黑客的話,下面的用戶行為就把他給完全暴露了!
這些用戶行為記錄默認按照倒序排列,我們可以從下往上一條條看用戶的使用軌跡。通過用戶行為可以得知出錯前的整個操作流程:
打開我們網(wǎng)站的首頁
點擊“免費試用“進入注冊頁面
輸入郵箱
輸入密碼
再次出入密碼
點擊創(chuàng)建團隊
點擊創(chuàng)建團隊
團隊創(chuàng)建成功
報錯
那么問題來了:有沒有什么異常的行為?
答:有!他點擊了創(chuàng)建團隊兩次。
憑著我敏銳的嗅覺意識到可能是由于用戶快速點擊"創(chuàng)建團隊"按鈕兩次導(dǎo)致。通過時間記錄發(fā)現(xiàn)第一次點擊是在1.86m,第二次在1.87m。也就是說:用戶在很短的時間內(nèi)快速點擊了兩次。
剛剛的用戶行為記錄過濾了網(wǎng)絡(luò)請求,接下里我們結(jié)合網(wǎng)絡(luò)請求一起分析:
可以發(fā)現(xiàn)有兩個/members/email的GET請求,并且都成功返回404,這里代碼的意思是指該郵箱尚未被注冊,可以被使用。一個/members/create請求成功返回200,表示賬戶創(chuàng)建成功。最后報錯的/members/create請求失敗返回409。
到這里基本確定出錯原因就是由于用戶快速點擊創(chuàng)建團隊導(dǎo)致。
有沒有這種可能呢,嘗試復(fù)現(xiàn)一下看看唄!于是,我打開了注冊頁面,輸入郵箱和密碼,然后以超快的手速點擊創(chuàng)建團隊N次。哈哈哈哈,不出所料,被我成功復(fù)現(xiàn)了!
只要能夠成功復(fù)現(xiàn),這個BUG基本上就算被解決了,接下來就是去分析如何優(yōu)化代碼防止出現(xiàn)這種情況了。有兩個思路:1. 用戶點擊之后,設(shè)置被點擊的按鈕無效直到點擊請求完全被處理;2. 將驗證郵箱是否存在的和創(chuàng)建團隊兩個異步事件想辦法合并為一個原子操作。綜合考慮,決定使用第一種方案。因為實現(xiàn)簡單,對現(xiàn)有代碼改動不大。
總的來說:當在沒有堆棧信息或者報錯信息難以理解的時候,F(xiàn)undebug記錄的用戶行為真的很有用。五星推薦前端開發(fā)接入到項目中!
關(guān)于FundebugFundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應(yīng)用實時BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計處理了10億+錯誤事件,付費客戶有陽光保險、核桃編程、荔枝FM、掌門1對1、微脈、青團社等眾多知名企業(yè)。歡迎大家免費試用!
版權(quán)聲明轉(zhuǎn)載時請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/09/06/fundebug-user-behavior-help-debug/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/91796.html
摘要:同步一次執(zhí)行一件事,同步引擎一次只執(zhí)行一行,是同步的。調(diào)用函數(shù)將其推入堆棧并從函數(shù)返回將其彈出堆棧。執(zhí)行上下文當函數(shù)放入到調(diào)用堆棧時由創(chuàng)建的環(huán)境。執(zhí)行結(jié)果它會立即被推到回調(diào)隊列,但它仍然會等待調(diào)用堆棧為空才會執(zhí)行。 為了保證可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 一些名詞 JS引擎 — 一個讀取代碼并運行的引擎,沒有單一的J...
摘要:總的來說,可以稱為文本主導(dǎo)的正則引擎,可以稱為表達式主導(dǎo)的正則引擎。首先,正則表達式在計算機看來只是一串符號,正則引擎首先肯定要解析它。精通正則表達式書中說引擎不支持非貪婪模式,很明顯不是引擎。正則表達式中可以商榷的部分就叫做備選狀態(tài)。 本文是『horseshoe·Regex專題』系列文章之一,后續(xù)會有更多專題推出GitHub地址:https://github.com/veedrin/...
摘要:示例使用顯示隱藏組件這個示例是一個組件,它顯示一些文本,并在末尾顯示一個鏈接,當單擊鏈接時,它展開剩下的文本。還有一個處理提交的函數(shù),其中,來阻止頁面刷新并打印出表單值。它使用傳遞一個對象,為了確?,F(xiàn)有的狀態(tài)不被覆蓋,這里使用了展開運算。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 到 React 16.8 目前為止,...
摘要:失業(yè)的兩周真的也是爽啊,每天打打球,去面試面試,當作逛街。為什么走我一定是瘋了,我才辭職的吧。我一直覺得工作是自己喜歡,不是因為生活所迫。錢,只是說能力的體現(xiàn)。但是不忘初心,善始善終,生活才剛剛開始啊。。。? 失業(yè)的第二周,一邊玩的很開心一邊又擔心工作,一邊投簡歷一邊面試,一邊嫌棄廠太小不想去,一邊大廠又沒有消息,糾結(jié)糾結(jié)。 ? 從大一暑假邊上課邊工作到后來全職工作,其中寒暑假無休,畢業(yè)跟實...
摘要:業(yè)務(wù)開發(fā)中的調(diào)試方法總結(jié)這段時間,接觸了單元測試,同時業(yè)務(wù)中遇到了一些需要排錯調(diào)試的情況,就把自己的經(jīng)驗做個小結(jié)。但是如果你的業(yè)務(wù)經(jīng)常變化,但是變化的部分并不會影響單元測試,那這種情況下的單元測試性價比就很高。 業(yè)務(wù)開發(fā)中的調(diào)試方法總結(jié) 這段時間,接觸了單元測試,同時業(yè)務(wù)中遇到了一些需要排錯調(diào)試的情況,就把自己的經(jīng)驗做個小結(jié)。 3種調(diào)試方法 狼叔說,常見的三種調(diào)試的境界 初級: 打l...
閱讀 4114·2021-11-22 13:53
閱讀 3715·2021-11-19 11:29
閱讀 1487·2021-09-08 09:35
閱讀 3327·2020-12-03 17:26
閱讀 590·2019-08-29 16:06
閱讀 2225·2019-08-26 13:50
閱讀 1270·2019-08-23 18:32
閱讀 2232·2019-08-23 18:12