首页 > 解决方案 > 我可以在提示中插入函数吗?

问题描述

我正在尝试为自己和几个朋友启动一个非常基本的聊天应用程序,并希望在加载网站时使用提示 + socket.emit 包括密码检查:

var username = prompt('password:');
socket.emit('password', password);

我想插入一个函数,根据我定义的答案检查他们的输入。像这样的东西:

var codeword = prompt('password:', function checkPrompt(password) {
            if (prompt.password.length === 0) {
                return false;
            }

            if (password.value !== answer.value) {
                return false;
            }

            return true;
            });

但是ERR_INVALID_ARG_TYPE(name, 'Function', value);一旦我运行该应用程序,我就会得到。我该如何实施?

旁注:我知道这是非常不安全的。一旦我设置了数据库,我将实施真正的密码检查,但在那之前我只想要一个简单的占位符。

标签: node.jsexpresssocket.ioejs

解决方案


prompt是一种“阻塞”方法,因此不需要回调。当您不确定回调中的代码何时执行时,需要回调。这不是这里的情况。例如,您可以在do...while循环中处理返回的结果。

带有静态密码检查的虚拟示例:

// We will keep the user in the loop until the password is correct...
do {
   var password = prompt('Password:');
} while (password !== 'abcd');

// At this point we know the password was correct.
alert('Password was correct!');

具有专用身份验证方法的虚拟示例:

function authenticate(username, password) {
  if (username == 'john' && password == 'abcd') {
    return true;
  }
  return false;
}

// We will keep the user in the loop until the password is correct...
do {
   var username = prompt('Username:');
   var password = prompt('Password:');
   var loginSuccessful = authenticate(username, password);
} while (!loginSuccessful);

// At this point we know the password was correct.
alert('Password was correct!');

从安全的角度来看,只有在服务器端拥有身份验证逻辑才有意义,因此您很可能希望从上述authenticate函数中进行 AJAX 调用(例如使用 Fetch API 或jQuery.post- 如果您'正在使用 jQuery)。然后该方法将返回truefalse基于服务器端调用的响应。


推荐阅读