onKeyup 或 onBlur 更适合检查用户名是否存在?

onKeyup OR onBlur is better for check username existence?

我正在努力使用我的第一个注册表单的用户检查功能。在这种情况下,我无法决定哪个更好:onKeyuponBlur

我的代码使用 ajax 即时检查数据库中是否存在用户名(在提交表单之前)。

我主要担心的是:

With onKeyup: 如果有人输入:'John' 立即弹出警报并说它已被占用,但也许我们的访客试图输入“JohnDoe”,但从来不想用“John”注册。这样每个用户都可以通过简单的单词猜测/输入任何内容来找到很多已经使用的用户名。这让我很困扰,因为这似乎是一个很大的安全风险。

使用 onBlur:如果有人输入“John”并走得更远(点击离开),警报会立即弹出并显示用户名已被占用。没关系,但正常的用户反应是:输入另一个名称并等待。 (点击不是很明显)。这样用户每次都需要点击退出才能看到当前的结果。我认为这真的很烦人(而且绝对不是傻瓜)

哪个更好?你用哪一个?或者有没有比这两个更好的选项来使用户友好 "on the fly" 用户存在检查?

谢谢!

我认为这在很大程度上是个人喜好问题。我不会太担心暴露用户名的存在。无论您采用何种方法,总会有办法找出哪些名称已经存在,要么通过一遍又一遍地提交表单,要么通过反复模糊输入。

从可用性的角度来看,我认为模糊要求并不明显,就像你提到的那样。我会采用 keyup 方法,因为它允许用户根据即时反馈快速更改他们的用户名。

但是,对每次按键执行 GET 查询确实会导致竞争条件,在这种情况下,可能会在已处理后续击键后返回对击键的响应。因此,请务必在发送新请求之前取消或完成任何先前的 AJAX 请求。这可以使用 AJAX 队列来完成。

取消之前的请求也有助于防止您提到的暴力用户名抓取场景,因为恶意用户必须等待每个请求完成才能输入新字符。考虑到网络延迟,暴力攻击方法不会成功获取大量用户名。