На моем сайте есть форма регистрации и входа. Я хочу, чтобы пользователь оставался в системе, когда они заполняют форму регистрации и нажимают кнопку регистрации или когда они нажимают кнопку входа в систему, если они уже зарегистрированы, но не вошли в систему.
Я также хочу иметь возможность переключать представления, когда пользователь входит в систему с помощью кнопки на панели навигации, которая имеет его имя пользователя. Когда пользователь не вошел в систему, на панели навигации будет кнопка входа / регистрации.
Это то, что у меня есть до сих пор.
Буду очень признателен всем, кто откликнется на мой запрос. Заранее спасибо!
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;
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Начальный комментарий: Предполагая, что логин подразумевает какую-то аутентификацию, и учитывая, что любая аутентификация потребует по крайней мере некоторой формы безопасности, чтобы пройти тест, который будет называться таковым, у вас в значительной степени есть только расширенная проверка, а не логин. Это здорово в духе обучения, но я чувствую себя обязанным указать, что это не должно использоваться ни для чего, кроме обучения, и что ответ ниже предназначен для перспективы, а не для чего-то еще.
С учетом сказанного, то, что вы, похоже, ищете, - это просто какой-то способ сохранить тот факт, что пользователь ввел правильные значения в ваши формы, чтобы убедиться, что если они уйдут и вернутся или перезагрузятся, вы все равно сможете их лечить. как правильные средства ввода.
Я бы сказал, что наиболее распространенные / простые способы сохранения данных в 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, поэтому это одна из причин, по которой это небезопасно.