摘要: 通过分析用户的行为,才想得到为什么会出现这种情况!

前两天在BearyChat收到这样的一个报警消息:

409 ?Conflict ? 平时很少遇到这样的错误,貌似很严重的样子,吓得我赶紧查看到底发生了什么。

仔细查看错误详情发现是因为使用同一个邮箱账号多次注册导致后面的请求数据库直接报错。

但是,不应该啊!我们是事先有做检查的。如果该邮箱已经被注册,会提醒并且不让注册的。难道对方是个黑客,直接调用API发请求?如果是这样那就更加危险了,我们已经被黑客盯上了!

可是这样做对黑客也没什么好处啊,并且IP显示为国内地址,如果真的是黑客好歹用国外的地址吧。想了想,还是仔细分析到底出了什么问题吧。

再往下一看,发现自己完全是多想了。如果是黑客的话,下面的用户行为就把他给完全暴露了!

这些用户行为记录默认按照倒序排列,我们可以从下往上一条条看用户的使用轨迹。通过用户行为可以得知出错前的整个操作流程:

  • 打开我们网站的首页
  • 点击“免费试用“进入注册页面
  • 输入邮箱
  • 输入密码
  • 再次出入密码
  • 点击创建团队
  • 点击创建团队
  • 团队创建成功
  • 报错

那么问题来了:有没有什么异常的行为?
答:有!他点击了创建团队两次。

凭着我敏锐的嗅觉意识到可能是由于用户快速点击”创建团队”按钮两次导致。通过时间记录发现第一次点击是在1.86m,第二次在1.87m。也就是说:用户在很短的时间内快速点击了两次。

刚刚的用户行为记录过滤了网络请求,接下里我们结合网络请求一起分析:

可以发现有两个/members/email的GET请求,并且都成功返回404,这里代码的意思是指该邮箱尚未被注册,可以被使用。一个/members/create请求成功返回200,表示账户创建成功。最后报错的/members/create请求失败返回409。

到这里基本确定出错原因就是由于用户快速点击创建团队导致。
有没有这种可能呢,尝试复现一下看看呗!于是,我打开了注册页面,输入邮箱和密码,然后以超快的手速点击创建团队N次。哈哈哈哈,不出所料,被我成功复现了!

只要能够成功复现,这个BUG基本上就算被解决了,接下来就是去分析如何优化代码防止出现这种情况了。有两个思路:1. 用户点击之后,设置被点击的按钮无效直到点击请求完全被处理;2. 将验证邮箱是否存在的和创建团队两个异步事件想办法合并为一个原子操作。综合考虑,决定使用第一种方案。因为实现简单,对现有代码改动不大。

总的来说:当在没有堆栈信息或者报错信息难以理解的时候,Fundebug记录的用户行为真的很有用。五星推荐前端开发接入到项目中!

关于Fundebug

Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了7亿+错误事件,得到了Google、360、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!

版权声明

转载时请注明作者Fundebug以及本文地址:

https://blog.fundebug.com/2017/09/06/fundebug-user-behavior-help-debug/

我是这样搞懂一个神奇的BUG的更多相关文章

  1. 一个神奇的bug:OOM?优雅终止线程?系统内存占用较高?

    摘要:该项目是DAYU平台的数据开发(DLF),数据开发中一个重要的功能就是ETL(数据清洗).ETL由源端到目的端,中间的业务逻辑一般由用户自己编写的SQL模板实现,velocity是其中涉及的一种 ...

  2. 记一个神奇的Bug

    多年以后,当Abraham凝视着一行行新时代的代码在屏幕上川流不息的时候,他会想起2019年4月17日那个不平凡夜晚,以及在那个夜晚他发现的那个不可思议的Bug. 虽然像无数个普普通通的夜晚一样,我在 ...

  3. 一个神奇的bug

    在使用touch命令创建了一个swift文件后,如果用xcode打开该文件,然后输入 #!/usr/bin/env xcrun swift 接着你就会发现,xcode崩溃了.

  4. 一个神奇的BUG :Failed to finalize session : INSTALL_FAILED_INVALID_APK: /data/app/vmdl99393454.tmp/10_slice__ signatures are inconsistent

    Android Studio 在Gradle编译完成后安装APK时总是失败,EventLog提示如下信息: Failed to finalize session : INSTALL_FAILED_IN ...

  5. 神奇的bug,退出时自动更新时间

    遇到一个神奇的bug,用户退出时,上次登录时间会变成退出时的时间. 于是开始跟踪,发现Laravel在退出时,会做一次脏检查,这时会更新rember_token,这时就会有update操作如下. 而粗 ...

  6. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  7. 一个注解搞懂 Sentinel,@SentinelResource 总结

    在前面的博客中,我给大家演示了使用 @SentinelResource 定义资源完成限流的例子, 下面就从源码解析开始,看下SentinelResource是如何实现限流的,以及@SentinelRe ...

  8. (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

    背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...

  9. 五分钟搞懂Vuex

    这段时间一直在用vue写项目,vuex在项目中也会依葫芦画瓢使用,但是总有一种朦朦胧胧的感觉.于是决定彻底搞懂它. 看了一下午的官方文档,以及资料,才发现vuex so easy! 作为一个圈子中的人 ...

随机推荐

  1. Javascript高级编程学习笔记(37)—— DOM(3)Element

    Element类型 除了Document类型之外,Element类型应该就是web编程中最常用的类型了 Element类型主要用于表现XML.HTML元素,提供对元素标签名.子节点以及特性的访问 特性 ...

  2. 解决微信小程序登录与发布的一些问题

    解决微信小程序的问题 图片在电脑上显示但在手机上却无法显示的问题 要使用的是本地图片,不想把图片上传到网络再通过https的方式解决,解决方法如下: 1.image src中的图片地址对英文字母大小写 ...

  3. js控制多层单选,多选按钮,做隐藏操作

    项目中遇到多层级单选,多选按钮的置灰/隐藏操作.特意写了一个公用组件: //置灰方式 //controllerArr数组添加如下数据: //{ctrlName:"gds_anquanyuan ...

  4. MFCC特征参数提取流程概述

      一 概念概述: 在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scale Frequenc ...

  5. 带你一文了解Python中的运算符

    运算符 目标 算数运算符 比较(关系)运算符 逻辑运算符 赋值运算符 运算符的优先级 数学符号表链接:https://zh.wikipedia.org/wiki/数学符号表 01. 算数运算符 是完成 ...

  6. [原创]K8Cscan插件之Windows密码爆破

    [原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...

  7. 动态dp初探

    动态dp初探 动态区间最大子段和问题 给出长度为\(n\)的序列和\(m\)次操作,每次修改一个元素的值或查询区间的最大字段和(SP1714 GSS3). 设\(f[i]\)为以下标\(i\)结尾的最 ...

  8. ASP.NET Core 2.1中基于角色的授权

    ASP.NET Core 2.1中基于角色的授权 授权是来描述用户能够做什么的过程.例如,只允许管理员用户可以在电脑上进行软件的安装以及卸载.而非管理员用户只能使用软件而不能进行软件的安装以及卸载.它 ...

  9. Android--解析XML之DOM

    前言 前面已经介绍了Android平台下两种解析XML的方法,SAX和PULL,这两个均为事件驱动,以流的形式解析XML文档.现在介绍一种新的方式DOM方式解析XML. DOM是一种用于XML文档对象 ...

  10. solr7.3.1在CentOS7上的安装

    1 solr的下载 从Solr官方网站(http://archive.apache.org/dist/lucene/solr/7.3.1/ )下载Solr最新版本, 根据Solr的运行环境,Linux ...