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