Как подтвердить регистрацию и форму входа с помощью JavaScript

На моем сайте есть форма регистрации и входа. Я хочу, чтобы пользователь оставался в системе, когда они заполняют форму регистрации и нажимают кнопку регистрации или когда они нажимают кнопку входа в систему, если они уже зарегистрированы, но не вошли в систему.

Я также хочу иметь возможность переключать представления, когда пользователь входит в систему с помощью кнопки на панели навигации, которая имеет его имя пользователя. Когда пользователь не вошел в систему, на панели навигации будет кнопка входа / регистрации.

Это то, что у меня есть до сих пор.

Буду очень признателен всем, кто откликнется на мой запрос. Заранее спасибо!

HTML

//login form

<section class = "module">
      <div class = "container">
        <div class = "row">
          <div class = "col-sm-5 col-sm-offset-1 mb-sm-40">
            <h4 class = "font-alt">Login</h4>
            <hr class = "divider-w mb-10">
            <form class = "form" name = "loginForm" onSubmit = "validateForm();" action = "index_shop.html" method = "post">
              <div class = "form-group">
                <input class = "form-control" id = "username" name = "usr" type = "text" placeholder = "username"/>
              </div>
              <div class = "form-group">
                <input class = "form-control" id = "password" name = "pwd" type = "password" placeholder = "password"/>
              </div>
              <div class = "form-group">
                <button class = "btn btn-round btn-b" type = "submit" value = "login">Login</button>
              </div>
              <div class = "form-group"><a href = "">Forgot Password?</a></div>
            </form>
          </div>    

 //register form
          <div class = "col-sm-5">
            <h4 class = "font-alt">Register</h4>
            <hr class = "divider-w mb-10">
            <form class = "form" name = "regForm" onsubmit = "return Validate();" action = "index_shop.html" method = "post">
              <div class = "form-group">
                <input class = "form-control" id = "Email" type = "text" name = "email" placeholder = "Email"/>
                <div id = "email_error"></div>
              </div>
              <div class = "form-group">
                <input class = "form-control" id = "RegUser" type = "text" name = "username" placeholder = "Username"/>
                <div id = "name_error"></div>
              </div>
              <div class = "form-group">
                <input class = "form-control" id = "RegPass" type = "password" name = "password" placeholder = "Password"/>
              </div>
              <div class = "form-group">
                <input class = "form-control" id = "confirmPass" type = "password" name = "confirmPass" placeholder = "Re-enter Password"/>
                <div id = "password_error"></div>
              </div>
              <div class = "form-group">
                <button class = "btn btn-block btn-round btn-b" type = "submit" value = "register">Register</button>
              </div>
            </form>
          </div>
        </div>
      </div>
    </section>

JavaScript

//Login validatation

 function validateForm() {
            var user = document.loginForm.usr.value;
            var pass = document.loginForm.pwd.value;
            var username = "username";
            var password = "password";
            if ((user == username) && (pass == password)) {
                return true;
            }
            else {
                alert ("Login was unsuccessful, please check your username and password");
                return false;
            }
        }
//registerValidation

        var email = document.forms['regForm']['email'];
        var username = document.forms['regForm']['username'];
        var password = document.forms['regForm']['password'];
        var password_confirm = document.forms['regForm']['confirmPass'];

        var name_error = document.getElementById('name_error');
        var email_error = document.getElementById('email_error');
        var password_error = document.getElementById('password_error');

        username.addEventListener('blur', nameVerify, true);
        email.addEventListener('blur', emailVerify, true);
        password.addEventListener('blur', passwordVerify, true);

        function Validate() {
            // validate email
            if (email.value == "") {
                email.style.border = "1px solid red";
                document.getElementById('Email').style.color = "red";
                email_error.textContent = "Email is required";
                email.focus();
                return false;
            }
            // validate username
            if (username.value == "") {
                username.style.border = "1px solid red";
                document.getElementById('RegUser').style.color = "red";
                name_error.textContent = "Username is required";
                username.focus();
                return false;
            }
            if (username.value.length < 3) {
                username.style.border = "1px solid red";
                document.getElementById('RegUser').style.color = "red";
                name_error.textContent = "Username must be at least 3 characters";
                username.focus();
                return false;
            }
            // validate password
            if (password.value == "") {
                password.style.border = "1px solid red";
                document.getElementById('RegPass').style.color = "red";
                password_confirm.style.border = "1px solid red";
                password_error.textContent = "Password is required";
                password.focus();
                return false;
            }
            // check if the two passwords match
            if (password.value != confirmPass.value) {
                password.style.border = "1px solid red";
                document.getElementById('pass_confirm_div').style.color = "red";
                password_confirm.style.border = "1px solid red";
                password_error.innerHTML = "The two passwords do not match";
                return false;
            }
        }
        // event handler functions
        function nameVerify() {
            if (username.value != "") {
                username.style.border = "1px solid #5e6e66";
                document.getElementById('RegUser').style.color = "#5e6e66";
                name_error.innerHTML = "";
                return true;
            }
        }
        function emailVerify() {
            if (email.value != "") {
                email.style.border = "1px solid #5e6e66";
                document.getElementById('Email').style.color = "#5e6e66";
                email_error.innerHTML = "";
                return true;
            }
        }
        function passwordVerify() {
            if (password.value != "") {
                password.style.border = "1px solid #5e6e66";
                document.getElementById('RegPass').style.color = "#5e6e66";
                document.getElementById('confirmPass').style.color = "#5e6e66";
                password_error.innerHTML = "";
                return true;
            }
            if (password.value === password_confirm.value) {
                password.style.border = "1px solid #5e6e66";
                document.getElementById('confirmPass').style.color = "#5e6e66";
                password_error.innerHTML = "";
                return true;
            }
        }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
3 710
2

Ответы 2

Начальный комментарий: Предполагая, что логин подразумевает какую-то аутентификацию, и учитывая, что любая аутентификация потребует по крайней мере некоторой формы безопасности, чтобы пройти тест, который будет называться таковым, у вас в значительной степени есть только расширенная проверка, а не логин. Это здорово в духе обучения, но я чувствую себя обязанным указать, что это не должно использоваться ни для чего, кроме обучения, и что ответ ниже предназначен для перспективы, а не для чего-то еще.

С учетом сказанного, то, что вы, похоже, ищете, - это просто какой-то способ сохранить тот факт, что пользователь ввел правильные значения в ваши формы, чтобы убедиться, что если они уйдут и вернутся или перезагрузятся, вы все равно сможете их лечить. как правильные средства ввода.

Я бы сказал, что наиболее распространенные / простые способы сохранения данных в JavaScript - это файлы cookie или LocalStorage. LocalStorage действительно имеет некоторые проблемы, но пока давайте об этом не будем. Для хранения данных LocalStorage принимает ключ и значение и сохраняет это значение вместе с этим ключом в браузере пользователя на вашей странице. Используя ключ, мы можем позже получить его.

Итак, по сути, хорошей отправной точкой является создание функции, способной сохранять данные, и функции, способной извлекать данные.

Мы можем создать что-то вроде:

// Really just an abstraction of localStorage.setItem, it'll come in handy 
function storeData(storageKey, myValueToStore) {
    localStorage.setItem(storageKey, myValueToStore);
}

// Really just an abstraction of localStorage.getItem, it'll come in handy
function getData(storageKey) {
    localStorage.getItem(storageKey);
}

Имея эти 2 доступные функции, мы можем теперь, в качестве очень, очень, очень, очень простого примера, сохранить имя пользователя для того, кто входит в систему или регистрируется, а затем позже проверять, есть ли какое-либо доступное имя пользователя. Таким образом, постоянство нашей «аутентификации» зависит от того, получал ли пользователь когда-либо правильное имя пользователя.

Это выглядело бы примерно так:

 function validateForm() {
      var user = document.loginForm.usr.value;
      var pass = document.loginForm.pwd.value;
      var username = "username";
      var password = "password";
      if ((user == username) && (pass == password)) {


          // User entered the correct input, lets store it so that we later can 
          // ensure that he has done so
          storeData("validatedUserName", user); // Store the user with key "validatedUserName"


          return true;
      }
      else {
          alert ("Login was unsuccessful, please check your username and password");
          return false;
      }
  }

Теперь вы можете позже проверить, существуют ли такие данные, и использовать их для «проверки» пользователя:

// In some sort of start up or initially running script:
var previouslyEnteredUserName = getData("validatedUserName");

// If we didn't find any value, our variable will be null, so we can use that
// to check for "login"
if (previouslyEnteredUserName !== null) {
    alert("Hello " + previouslyEnteredUserName + ", welcome back!");
}
else {
     alert("Hey, you have never logged in to this system! I don't have any username stored for you in my LocalStorage!");
}

Начну с того, что любая аутентификация не должна обрабатываться клиентским javascript. Его следует проверять на стороне сервера и проверять каждый раз, когда пользователь переходит на «безопасную» страницу. Тем не менее, вот как я буду делать то, что вы пытаетесь сделать.

1. Сохраняет информацию об успешном входе в систему в файле cookie сеанса. Для этого вы можете использовать этот легкий плагин. https://github.com/js-cookie/js-cookie

2. Установите cookie с именем «sessionAuth» и его значение «true», когда пользователь отправляет форму входа, а вы подтверждаете его информацию, и она верна. Вы можете проверить это при каждой загрузке страницы вот так. (Я пишу это на jQuery, это проще, но используйте Plain JS, если хотите)

var userName = "User's Name";

if ( Cookies.get("sessionAuth") && Cookies.get('sessionAuth') == "true" ) {
	//User is logged in
	$(".login-btn").attr("href","/account").text(userName);
}
else {
	//User is not logged in, do things here
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<nav>
  <a href = "#">Home</a>
  <a href = "#">About</a>
  <a href = "#">Help</a>
  <a class = "login-btn" href = "/login">Login</a>
</nav>

Я бы так и поступил, но никогда не стал бы делать это на стороне клиента. Любой может увидеть ваш код, и он очень небезопасен. Я не могу этого не подчеркнуть!

Правильно, пользователь может изменять и проверять javascript, поэтому это одна из причин, по которой это небезопасно.

Garrett Motzner 04.07.2018 00:55

Другие вопросы по теме