@dlangru

Страница 16 из 719
Eto
13.06.2016
13:30:11
А что ООП уже не в моде?
Речь не о моде. Речь о смысле. Я пока что знаю только одну задачу, где ООП прекрасно ложится. Во всё остальном он просто лишний.

Dmitry
13.06.2016
13:30:20
ГУИ?

Oleg
13.06.2016
13:30:20
@DmitryBubnenkov если hash( login + pass ) не присутствуют в базе, то значит кто-то что-то не правильно ввёл

Dmitry
13.06.2016
13:30:47
Ну я хочу расширенную инфу давать. Типа юзер есть, пароль не верен

Google
Eto
13.06.2016
13:30:57
ГУИ?
Нет, я говорил о модели данных Telegram.

Oleg
13.06.2016
13:31:35
@DmitryBubnenkov это потенциальная уязвимость

@sigod не думаю что стоит разводить этот спор

Dmitry
13.06.2016
13:32:04
Я понимаю, но тут пока задача сделать именно простую систему.

Pavel
13.06.2016
13:32:06
bool wrongPassword; bool userExists; bool userIsAdmin; if (usersFromDB.filter!(u=>u.login == login && u.password != password)) wrongPassword = true; ... это вообще наркомания или норм?
Сначала выбираешь юзера по логину, проверяешь его, потом сверяешь хеш пароля. Обычно не уточняют что пользователь не существует, а просто пишут "неверный логин или пароль"

Oleg
13.06.2016
13:32:32
правильная архитектура всегда сокращает время разработки, а неправильная губит всю разработку

Pavel
13.06.2016
13:32:34
Иначе есть уязвимость к проверке, зарегистрирован ли твой друг в системе

Max
13.06.2016
13:32:54
Нет, я говорил о модели данных Telegram.
И чем же заменить тот же паттерн визитора, используемый в каждом компиляторе? Тот же гуй писать как на винапи?

Dmitry
13.06.2016
13:33:43
Блин. Пока надо вообще чтобы все открытым текстом хранилось. Я пишу онлайн тест очень простенький и там просто тестируемым будут выдаваться логины и пароли готовые. И нужно если что пароль иметь возможность посмотреть и новый скинуть если юзер его забудет

Oleg
13.06.2016
13:34:45
@DmitryBubnenkov прости, но это дичь... не понимаю что собственно этим можно протестировать

систему прав?

Pavel
13.06.2016
13:35:10
студентов протестировать)

Google
Dmitry
13.06.2016
13:35:40
Типа того... только не студенты, а раз в пол года разные гаврики

Oleg
13.06.2016
13:36:10
@sigod ООП — это модель мышления разработчика

Dmitry
13.06.2016
13:36:15
там ни регистрации ничего не будет — просто готовые пароли юзерм раздадут и все

Oleg
13.06.2016
13:36:30
если ты хорошо мыслишь в других категориях, значит используй их, раз инструмент позволяет

Pavel
13.06.2016
13:36:47
Конечно после мира webdev php писать веб проекты на D очень тяжело из-за отсутствия практически всех инструментов.

Max
13.06.2016
13:37:36
Каждый слышит, то что хочет слышать.
Я слышал что "ООП – это лишнее", поправь если чего-то я не допонял

Oleg
13.06.2016
13:38:33
@DmitryBubnenkov что за гаврики? где будет стоять сервер (какой доступ)? насколько ценна информация на нём?

Dmitry
13.06.2016
13:38:44
Ценность нулевая

Oleg
13.06.2016
13:38:58
тогда зачем вообще логины и пароли?

Dmitry
13.06.2016
13:39:09
Начальство так тупо хочет

Oleg
13.06.2016
13:39:18
хм...

сервер локальный?

Dmitry
13.06.2016
13:39:50
минувшая онлайн система тестирования занимала 30 мегабайт и падала если юзер вместо цифры букву вводил

Oleg
13.06.2016
13:40:09
тестирования кого?

Dmitry
13.06.2016
13:40:15
причем падала от слова совсем — тоесть только чистка БД помогала

Oleg
13.06.2016
13:40:24
ох

Dmitry
13.06.2016
13:41:23
У нас в конторе иногда проводят разную пежню типа обучения кого-то. Нужно узнать на сколько люди адекватны. И что они вообще на старте знают, чтобы программу под них адаптировать

Oleg
13.06.2016
13:41:59
тоесть это не те люди, которые могут ради результатов попробовать взломать сервер?

Dmitry
13.06.2016
13:42:09
не вообще не тот случай

тупо чтобы excel не слать всем с просьбой заполнить

Google
Oleg
13.06.2016
13:43:33
тогда...

`auto a = db.filter(u=>u.login==login); if( a.empty ) { /* нет пользователя такого */ } auto user = a.front; if( user.pass != pass ) { /* введён не верный пароль */ }

это самый простой вариант

но так плохо делать

восклицательный знак потерял

после filter

Pavel
13.06.2016
13:47:01
auto a = db.filter(u=>u.login==login); а это как работает на уровне БД ? Выбираются все пользователи и потом в памяти фильтруется ?

Dmitry
13.06.2016
13:47:04
ок пасибо

Павел, ну получается что да

Oleg
13.06.2016
13:47:37
@chebotarevp я без малейшего понятия)) это псевдокод))

у каждой orm свои закидоны

а кто-нибудь тут есть, кто давно пользуется D и лазил в код dub?

Dmitry
13.06.2016
13:51:27
Я лазил, только наверно меня спрашивать толку мало)

Oleg
13.06.2016
13:52:07
https://github.com/dlang/dub/issues/50

наверняка кто-то же пробовал реализовать

3 года так то уже весит

и на вскидку не так сложно

особенно учитывая последний комментарий Людвига

почему никто не взялся, не могу понять

может быть на самом деле это сложно?

Google
Oleg
13.06.2016
13:53:31
и существует масса подводных камней?

Max
13.06.2016
14:04:07
почему никто не взялся, не могу понять
Потому что некому. Посмотри на кол-во DIP-ов на wiki.dlang.org, которые даже не ревьювнуты. Вальтер с Александерску на последнем dconf уже открыто звали людей помогать

Dmitry
13.06.2016
14:15:13
Так. Предположим у меня есть структура: struct userCredentials // info from DB { bool isExists; // to set up flag if user exists in DB bool isAdmin; bool passwordOK; //set to true if password from login == password from DB } Которую я заполняю так: userCredentials checkCurrentUserСredentials(string login, string password) // проверяем того кто логинится на основании данных в БД { userCredentials usercredentials; if (usersFromDB.filter!(u=>u.login == login && u.password != password)) { usercredentials.isExists = true; usercredentials.passwordOK = false; } if (usersFromDB.filter!(u=>u.login == login && u.password == password)) { usercredentials.passwordOK = true; if (usersFromDB.filter!(u=>u.usergroup == "admins")) usercredentials.isAdmin = true; } return usercredentials; } Далее в коде идет функция login() {} и мне нужно внутри нее как-то проверить, что мне checkCurrentUserСredentials вернул. Могу я через точку обращаться типа так: checkCurrentUserСredentials.isExists ? Или как это сделать?

Oleg
13.06.2016
14:35:45
логика не правильная

вот как-то совсем не нравится

Pavel
13.06.2016
14:43:11
Мне это не нравится тем, что ты заводишь структуру отдельную и потом используешь ее только в одном месте.

Вместо булевых переменных можно кидать исключения.

Тогда ты в конце кода просто ловишь любое исключение логина и выводишь его если оно есть.

Oleg
13.06.2016
15:03:20
if (usersFromDB.filter!(u=>u.login == login && u.password != password)) мне вот это не нравится

неявное приведение результата фильтрации к bool

хоть длину проверь...

или лучше свойство empty

вопрос выставления куков решён?

просто логиниться при каждом обновлении страницы это не очень

Pavel
13.06.2016
15:09:07
Я думаю что про куки там еще далеко) В vibe.d все вручную

Dmitry
13.06.2016
15:26:15
Да с куками норм все

Я там сессию поднимаю. И с куками напрямую не взаимодействую

Если не заводить булевых переменных ради одного места то как еще быть?

Pavel
13.06.2016
15:37:56
Я вижу смешивание различной логики в одном месте. 1) Поля isExists и passwordOK относятся к аутентификации. Причем если isExists == false то нет смысла сверять правильность пароля. 2) isAdmin это авторизация. Операция проверки применяется к уже открытой сессии которая хранится в куках.

Dmitry
13.06.2016
15:38:38
isAdmin это флаг админской группы

Google
Pavel
13.06.2016
15:38:51
Таким образом, тебе нужно в действии логина лишь проверить логин и пароль последовательно. Если что-то не то, то бросить исключение и написать ошибку. Для этого не нужны переменные вообще.

А вот когда ты уже успешно залогинил пользователя, стартовал ему сессию, то там можно и isAdmin проверять.

Это такая логика во всех фреймворках реализована.

Dmitry
13.06.2016
15:41:20
Хорошо, я примерно понял что у меня криво. Сейчас попробую просто сделать чтобы работало (работу делать все же надо) а потом уже буду думать как сделать покрасивее

Никак не могу в толк взять. Вот передаю я в метод данные: checkCurrentUserСredentials(login, pass); теперь мне нужно сделать: if(checkCurrentUserСredentials.isExists) { ... } Так чтоли? Но checkCurrentUserСredentials получается вроде как вызов меда и обращение к его переменной isExists или нет?

Тогда получается мне нужно создать экземпляр: userCredentials usercredentials; вне функций и заполнять его, но это вообще как-то криво

Pavel
13.06.2016
15:47:20
Ты просто делаешь user = db.findUser(login); if (user.isEmpty) { throw new Exception("User does not exists"); } if (user.password != hash(password)) { throw new Exception("Password incorrect"); }

Dmitry
13.06.2016
15:48:05
Так, а если так как я пытаюсь. Можно так вообще или у меня дико упоротый вариант получается?

Pavel
13.06.2016
15:49:24
Блин да делай как можешь, главное чтобы работало )

Что значит можно/неможно ? Если пускает тех кого надо и не пускает тех кого не надо - значит можно.

Но когда у тебя появятся доп. требования к логину то станет неудобно переделывать

Dmitry
13.06.2016
15:50:40
Я просто не понимаю следующий момент. С одной стороны мне нужно вызывать функцию: checkCurrentUserСredentials и передать в нее логин и пароль, с другой у потом проверять что она возвращает каждый раз т.е. снова и снова ее дергать

Pavel
13.06.2016
15:52:32
Почему каждый раз? Только один раз при логине

Dmitry
13.06.2016
15:52:57
Тогда получается надо сделать так, чтобы checkCurrentUserСredentials просто заполянла стрктуру объявленню до нее и ничего не возвращала. Тогда я смогу проверять что там в структуре получилось

Pavel
13.06.2016
15:53:33
Зачем тебе каждый раз дергать эту функцию? Ты один раз проверил, и записал id сессии в куку

Dmitry
13.06.2016
15:56:15
login (res req) { checkCurrentUserСredentials(request["username"].to!string, request["password"].to!string); // вот теперь мне нужно сделать ряд проверок if (checkCurrentUserСredentials != res.login { делаем ответ что юзера такого нет } if (checkCurrentUserСredentials == res.login { отвечаем что такой юзер есть } и тд }

Pavel
13.06.2016
15:57:18
У тебя логин и пароль каждый раз передаются чтоли?

Через что? То есть они в каждой html форме ?

Dmitry
13.06.2016
15:58:08
при логине один раз, но по моему коду получается что checkCurrentUserСredentials придется дергать постоянно т.к. она возвращает нужную мне структкру

Pavel
13.06.2016
15:58:45
Во втором запросе откуда ты возьмешь request["password"] ?

Dmitry
13.06.2016
15:59:55
нет, я имею ввиду что согласно моему коду придется внутри if в эту функцию логин и пароль передавать еще и еще раз

Oleg
13.06.2016
16:05:02
@DmitryBubnenkov не до конца понимаю зачем тебе вообще структура с такими полями

Страница 16 из 719