【问题标题】:Can I insert a function inside of a prompt?我可以在提示中插入一个函数吗?
【发布时间】:2021-07-24 11:16:32
【问题描述】:

我正在尝试为自己和几个朋友启动一个非常基本的聊天应用程序,并希望在加载网站时使用提示 + 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.js express socket.io ejs


    【解决方案1】:

    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

    【讨论】:

    • 啊,好吧,我没想过为此使用“do”。我想确保在用户名提示之后立即出现提示,所以这应该可以工作!用户能否通过检查元素找到该站点的密码?
    • 我已经扩展了我的答案,以便更清楚地了解如何进一步工作。
    • 我真的很感激!图我将只在 index.html 上导入 jquery.js,在我的 chat.js 中添加 AJAX 调用,这样可以正确隐藏它吗?凉爽的。感谢您的帮助
    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多