Javascript 密码保护区..一定是更好的方法

Javascript Password Protected area.. must be better way

我对 javascript 场景还很陌生,但是我有这段代码可以按预期的方式用于所有意图和目的..但是必须有一种更好更简洁的方式关于它,我很想看看它是如何完成的。

function Restricted() {

var password = 'pass1';
var password1 = 'pass2';
var password2 = 'pass3';
var password3 = 'pass4';
var password4 = 'pass5';

if (this.document.login.pass.value == password || this.document.login.pass.value == password1 || this.document.login.pass.value == password2 || this.document.login.pass.value == password3 || this.document.login.pass.value == password4) {

//Do stuff if correct

setTimeout(function() {
setLocation('#'); 
  }, 2000);
}
else {

//Alert them its wrong

}

如您所见.. 输入所有不同的密码是可以的并且是可以预料的,但是将所有不同的密码相互比较以判断它们是否有效的整个检查功能一定是最糟糕的方法之一解决这个问题..哈哈,当我看着它时,它几乎令人尴尬。

实现您的登录服务器端。您的服务器应确定用户是否值得信赖(通过输入一对已知的凭据),如果是,则允许访问网站的受限部分。

如果用户还没有输入正确的凭据并且没有正确的session/cookie证明,服务器应该拒绝输入。

查看如何使用您最喜欢的服务器端语言(PHP、NodeJS 等)实现简单的 login/authentication 系统。

您可以将密码放在数组中,然后使用数组的indexOf 方法。它 returns 数组中元素的索引,如果不存在则为 -1。

...
var passwords = ["pass1", "pass2"];
if (passwords.indexOf(this.document.login.pass.value) !== -1) {
...

然而,在 JavaScript 中比较密码并不是一种安全的方式,每个人都可以查看代码或更改它。

我将回答一个更笼统的问题,即不涉及有关客户端密码验证的更重要的问题……哎呀。一般的问题是:给定一个字符串列表,你如何匹配一个?

第一件事是获取字符串(密码)列表并将它们放入一个数组中。然后您可以使用内置数组方法匹配索引,例如 indexOf.

function Restricted() {
  var strings = ['pass1', 'pass2', 'pass3', 'pass4', 'pass5'];

  if (strings.indexOf(this.document.login.pass.value) !== -1) {
    //Do stuff if correct
    setTimeout(function() {
      setLocation('#');
    }, 2000);
  } else {
    //Alert them its wrong
  }
}