首页 > 解决方案 > onKeyup 或 onBlur 更适合检查用户名是否存在?

问题描述

我正在为我的第一个注册表单的用户检查功能而苦苦挣扎。在这种情况下,我无法确定哪个更好:onKeyuponBlur

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

我主要担心的是

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

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

哪一个更好?你用哪一个?或者有没有比这两个更好的选择来进行用户友好的“动态”用户存在检查?

谢谢!

标签: javascriptjqueryformson-the-fly

解决方案


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

正如您所提到的,从可用性的角度来看,我认为模糊要求并不明显。我会采用 keyup 方法,因为它允许用户根据即时反馈快速更改其用户名。

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

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


推荐阅读