javascript - onKeyup 或 onBlur 更适合检查用户名是否存在?
问题描述
我正在为我的第一个注册表单的用户检查功能而苦苦挣扎。在这种情况下,我无法确定哪个更好:onKeyup或onBlur。
我的代码使用 ajax 动态检查数据库中用户名的存在(在提交表单之前)。
我主要担心的是:
使用 onKeyup:如果有人输入:“ John ”警报会立即弹出并说它已经被占用,但也许我们的访问者试图输入“ JohnDoe ”并且从来不想用“ John ”注册。这样,每个用户都可以通过简单的单词猜测/输入任何内容来找到许多已经使用的用户名。这让我很困扰,因为这似乎是一个很大的安全风险。
使用 onBlur:如果有人输入“约翰”并走得更远(点击离开),警报会立即弹出并说用户名已被占用。没关系,但正常的用户反应是:输入另一个名称并等待。(点击不是很明显)。这样用户每次都需要点击退出才能看到当前的结果。我认为这真的很烦人(而且绝对不是愚蠢的)
哪一个更好?你用哪一个?或者有没有比这两个更好的选择来进行用户友好的“动态”用户存在检查?
谢谢!
解决方案
我认为这在很大程度上是个人喜好问题。我不会太担心暴露用户名的存在。无论您采用哪种方法,总有一种方法可以找出哪些名称已经存在,或者通过一遍又一遍地提交表单,或者通过反复模糊输入。
正如您所提到的,从可用性的角度来看,我认为模糊要求并不明显。我会采用 keyup 方法,因为它允许用户根据即时反馈快速更改其用户名。
然而,在每次按键上执行 GET 查询确实会导致竞争条件,在这种情况下,可能会在处理完后续按键后返回对按键的响应。因此,请务必在发送新请求之前取消或完成任何以前的 AJAX 请求。这可以使用 AJAX 队列来完成。
取消以前的请求也有助于防止您提到的暴力用户名抓取场景,因为恶意用户必须等待每个请求完成才能输入新字符。考虑到网络延迟,蛮力攻击方法在获取大量用户名时不会取得太大成功。
推荐阅读
- html - 如何在堆叠图标内居中元素
- ios - 如何打开watchos的网址
- vue.js - 为什么像`beforeLeave`这样的过渡方法在nuxt中不起作用
- javascript - 使用 .closest() 比较最近的 id
- c - Linux C 套接字 - recvmsg - 获取源 ifindex
- python - 如何在整个音频文件上调用 librosa 函数?
- laravel - 从 laravel 关系表中获取所有值
- javascript - 从 Java 访问 Mozilla Rhino 中的 NativeSet 成员
- awk - 使用 Sed 或 Awk 进行数据转换 - 名称到标题
- javascript - 使用反应节点 nodemailer express 的电子邮件 api 不起作用