Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как правильно реализовать ветку для ввода пароля?(начальный уровень) (https://javascript.ru/forum/misc/63072-kak-pravilno-realizovat-vetku-dlya-vvoda-parolya-nachalnyjj-uroven.html)

WhoAm7i7 16.05.2016 02:31

как правильно реализовать ветку для ввода пароля?(начальный уровень)
 
Доброго дня всем!
В данный момент только начал изучать JavaScript, так что не судите строго.
Суть такова:
Написать код, который будет запрашивать логин пользователя (prompt). - Done

Если посетитель вводит 'admin', то спрашивать пароль, если нажал отмена (escape) — выводить 'Canceled', если вводит что-то другое — 'Access denied'. - Done

Пароль проверять так. Если введён пароль 'passw0rd', то выводить 'Welcome home!', иначе — 'Wrong password', при отмене — 'Canceled'. - Done

Вопрос: как совместить эти два кода, что бы все было логично и последовательно, а не так как сейчас?

Код:
var login = prompt('Введите логин!');
if(login == 'admin'){
prompt('Введите пароль!');
} else if(login == null) {
alert('Отмена');
} else {
alert('В доступе отказано');
}

var pass = prompt('Введите пароль!');

if(pass == 'passw') {
alert('Welcome Home');
} else if(pass == null){
alert('Отмена');
} else {
alert('Неверный пароль');
}

http://jsbin.com/dodokesuje/edit?js,console

Dilettante_Pro 16.05.2016 11:53

WhoAm7i7,
Вообще-то логин-пароль обычно вводятся при помощи html
http://htmlbook.ru/samhtml5/formy/pole-dlya-parolya
а вот проверяться могут уже при помощи скрипта js - хотя обычно на сервере
Кроме того, и сервер сам может запрашивать логин-пароль, например
http://www.vsmirnov.ru/articles/passwords.html

Erolast 16.05.2016 16:40

Dilettante_Pro, так задача ж учебная, наверно.

Я бы сделал так:
function checkCredentials(loginRequired, passwordRequired) {
	switch (prompt('Введите логин')) {
		case loginRequired:
			break;
		case null:
			alert('Отмена');
			return;
		default:
			alert('В доступе отказано');
			return;
	}

	switch(prompt('Введите пароль')) {
		case passwordRequired:
			break;
		case null:
			alert('Отмена');
			return;
		default:
			alert('Неверный пароль')
			return;
	}

	alert('Welcome home');
}

checkCredentials('admin', 'passw0rd');

Dilettante_Pro 16.05.2016 17:50

Erolast,
В таком случае я бы просто сделал так:
var login = prompt('Введите логин!');
   if(login == 'admin'){
      var pass = prompt('Введите пароль!');
      if(pass == 'passw') {
         alert('Welcome Home');
      } else {
         alert('Неверный пароль');
      }
   }  else {
   alert('В доступе отказано');
}

Но, на мой взгляд, начинать надо с html - js вторичное вспомогательное средство для html

laimas 16.05.2016 18:13

Цитата:

Сообщение от Erolast
так задача ж учебная, наверно

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

Учебная - ну так пусть проверяет верен ли ввод сравнивая введенной с контрольным вводом. Это нужно проверять и можно на клиенте.

Erolast 16.05.2016 18:29

Цитата:

Сообщение от Dilettante_Pro (Сообщение 416737)
Erolast,
В таком случае я бы просто сделал так

А где обработка нулевого значения? По условию должен быть выведен алерт "отмена".

Цитата:

пароль никогда на клиенте не проверялся и проверяться не будет
Да. Потому что у клиента есть доступ ко всему, что происходит на клиентской стороне чисто по определению.

Dilettante_Pro 16.05.2016 18:46

Erolast,

Цитата:

А где обработка нулевого значения? По условию должен быть выведен алерт "отмена".
А как вы попадете на case null?
function checkCredentials(loginRequired, passwordRequired) {
	switch (prompt('Введите логин')) {
		case loginRequired:
			break;
		case null:
			alert('Отмена');
			return;
		default:
			alert('В доступе отказано');
			return;
	}

	switch(prompt('Введите пароль')) {
		case passwordRequired:
			break;
		case null:
			alert('Отмена');
			return;
		default:
			alert('Неверный пароль')
			return;
	}

	alert('Welcome home');
}

checkCredentials('admin', 'passw0rd');

Попадете - Esc
Но, кстати, в моем варианте это тоже не проблема:
var login = prompt('Введите логин!');
   if(login == 'admin'){
      var pass = prompt('Введите пароль!');
      if(pass == 'passw') {
         alert('Welcome Home');
      } else if(pass == null){
         alert('Отмена');
      }else {
         alert('Неверный пароль');
      }
   } else if(login == null) {
      alert('Отмена');
   } else {
      alert('В доступе отказано');
}

Erolast 16.05.2016 19:28

Цитата:

кстати, в моем варианте это тоже не проблема
И чем он теперь проще моего?

Dilettante_Pro 17.05.2016 06:41

Цитата:

Сообщение от Erolast (Сообщение 416754)
И чем он теперь проще моего?

Может, и не проще - это исправленный вариант топикстартера

WhoAm7i7 18.05.2016 18:20

Ребята благодарю, за готовые решения и варианты, с ваших комментов можно дополнительно обучаться! Все решения взял на заметку + доп.информацию от Laimas "Учить надо начинать с того, что веб приложение, это приложение с кучей ворот, и......." :thanks:


Часовой пояс GMT +3, время: 21:50.