简体   繁体   English

密码生成器代码不生成密码

[英]Password generator code not producing password

I am writing a code to randomly generate a password for a user given a set of criteria.我正在编写一个代码来为给定一组标准的用户随机生成密码。 The program asks the user to select what character types to include.该程序要求用户选择要包含的字符类型。 Once the user makes this selection, the code should generate the password for the user.一旦用户做出此选择,代码应为用户生成密码。 My code goes through the series of prompts but does not generate the password.我的代码通过了一系列提示,但不生成密码。 Could someone please tell me what I'm doing wrong?有人可以告诉我我做错了什么吗?

 // Code var generateBtn = document.querySelector("#generate"); // Declare variables for uppercase, lowercase, numeric, and special characters. var upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var lowerCase = "abcdefghijklmnopqrstuvwxyz"; var numeric = "0123456789"; var special = "!@#$%^&*()_-+={}[];:'`~<,>.?/|"; var passwordLength; // Function to check password length function chooseLength() { passwordLength = prompt("How many characters would you like to include in your password?"); // Use conditionals to restrict user to select password length between 8 and 128 characters inclusive if (passwordLength<8){ alert("Password length must be at least 8 characters long"); chooseLength(); }else if (passwordLength>128){ alert("Password length must be less than 129 characters"); chooseLength(); }else if (isNaN(passwordLength)){ alert("Password length must be a number between 8-128 characters"); chooseLength(); }else{ alert("Please select what character types you would like to be included in your password."); } return passwordLength; } // Let's ask the user what character types to include in their password (must include at least one type) function charType() { var upperChar = confirm("Click OK to include Upper case characters"); var lowerChar = confirm("click OK to include lower case characters"); var specialChar = confirm("Click OK to include special characters"); var numChar = confirm("Click OK to include numbers"); // Alert to notify user that at least one character type must be selected if (!(upperChar || lowerChar || specialChar || numChar)) { return alert("You must select at least one character type"); } } // Function to generate password using the user-selected input(s) function generatePassword(){ chooseLength(); console.log(passwordLength) charType(); var chars = ""; var password = ""; if (upperChar && lowerChar && specialChar && numChar){ chars += upperCase + lowerCase + special +numeric; }else if (upperChar && numChar){ chars += upperCase +numeric; }else if (numChar && specialChar){ chars += numeric + special; }else if (upperChar && specialChar){ chars += upperCase + special; }else if (upperChar && lowerChar) { chars += upperCase + lowerCase; }else if (lowerChar && numChar) { chars += lowerCase + numeric; }else if (lowerChar && specialChar){ chars += lowerCase + special; }else if (upperChar){ chars += upperCase; }else if(numberChar){ chars += numeric; }else if (specialChar){ chars += special; }else{ chars += lowerCase; } for(var i = 0; i < passwordLength; i++){ password += chars.charAt(Math.floor(Math.random() * chars.length)); } return password; } // Write password to the #password input function writePassword() { var password1 =""; password1 = generatePassword(); var passwordText = document.querySelector("#password"); passwordText.value = password1; } // Add event listener to generate button generateBtn.addEventListener("click", writePassword);

i think its because you define the variable inside a function and try to read it in other function我认为这是因为您在函数内定义变量并尝试在其他函数中读取它

 function charType() {
    var upperChar = confirm("Click OK to include Upper case characters");
    var lowerChar = confirm("click OK to include lower case characters");
    var specialChar = confirm("Click OK to include special characters");
    var numChar = confirm("Click OK to include numbers");
    
    ...rest code
 }

you should try to to move it outside to be a global variable like this您应该尝试将其移到外部成为这样的全局变量

    var upperChar;
    var lowerChar;
    var specialChar;
    var numChar;

    function charType() {
        upperChar = confirm("Click OK to include Upper case characters");
        lowerChar = confirm("click OK to include lower case characters");
        specialChar = confirm("Click OK to include special characters");
        numChar = confirm("Click OK to include numbers");
        
        ...rest code
    }

There are some comments for you in the code.代码中有一些注释供您参考。

That said, I know it's probably just for practice but don't use this password generator as it is not secure enough:).也就是说,我知道这可能只是为了练习,但不要使用这个密码生成器,因为它不够安全:)。

 // use const if possible const upperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const lowerCase = "abcdefghijklmnopqrstuvwxyz"; const numeric = "0123456789"; const special = "!@#$%^&*()_-+={}[];:'`~<,>.?/|"; // avoid using "globals" // var passwordLength; function chooseLength() { passwordLength = prompt("How many characters would you like to include in your password?"); if (passwordLength < 8) { alert("Password length must be at least 8 characters long"); chooseLength(); } else if (passwordLength > 128) { alert("Password length must be less than 129 characters"); chooseLength(); } else if (isNaN(passwordLength)) { alert("Password length must be a number between 8-128 characters"); chooseLength(); } else { alert("Please select what character types you would like to be included in your password."); } return passwordLength; } function generatePassword() { let password = ""; const passwordLength = chooseLength(); // you define this booleans in charType() this wont work cause of scope const upperChar = confirm("Click OK to include Upper case characters"); const lowerChar = confirm("click OK to include lower case characters"); const specialChar = confirm("Click OK to include special characters"); const numChar = confirm("Click OK to include numbers"); if (!(upperChar || lowerChar || specialChar || numChar)) { return alert("You must select at least one character type"); } let chars = ""; // this ifs can be simplyfied a lot if (upperChar) { chars += upperCase; } if (lowerChar) { chars += lowerCase; } if (specialChar) { chars += special; } if (numChar) { chars += numeric; } // this isn't really secure.. use https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues for (let i = 0; i < passwordLength; i++) { password += chars.charAt(Math.floor(Math.random() * chars.length)); } return password; } function writePassword() { document.getElementById("password").innerHTML = generatePassword(); } document.getElementById("generate").addEventListener("click", writePassword);
 <button id="generate">Generate Password</button> <div id="password"></div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM