170 похожих чатов

Привет Ребята, У меня такой спор вышел со знакомым по проектированию

активации акаунта и смены емайла.

Есть два варианта которых мы обсуждаем.

1. Хранить токен (код для активации) в таблице юзеров. И если активирует акаунт, ставим статус что активировали емайл.
При смене емайла, опять же используем поле токен в юзер таблице а также ещё поле new_email где будет хранится новый емайл до тех пор пока не активируем его, потом нулим его.
Но с другой стороны то что линк живёт вечно (пока не активируют), ничего не сломает по безопасности, он же не получает доступ к акаунту.

Минусы этого подхода к примеру то что линк на активацию будет всегда активным (пока не активируют емайл) иначе придётся создавать ещё одно поле уже под expires_at или что то в этом роде.

2. Хранить в отдельной таблице. Структура типа: id, user_id, type, value (тут будет например емайл на который сменим), token, created_at, expired_at
Такой вариант хорош что можно делать разные активации, как смена емайла, активация акаунта и.т.п.

Вариант 2 более гибкий, но первый в какой то мере быстрее.
Кто что думаем по этому поводу ? какой вариант правильней ? Учитывая ещё момент что продукт надо выводить быстрее на продакшен.

7 ответов

14 просмотров

но первый в какой то мере быстрее. Как-то непонятно почему он быстрее. И как сказали, второй вариант правильный. + надо добавить ещё поле token_type, дабы по крону грохать просроченные токены нужного типа

John-D Автор вопроса
Victooor
но первый в какой то мере быстрее. Как-то непонятн...

Там есть что то типа expires_at по этому крон может удалять потом эти данные, смысл хранить нет.

John D
Там есть что то типа expires_at по этому крон може...

Смысла хранить много. Например это токены доступа для приложения. Мы можем захотеть однажды разлогинить юзера на других девайсах, не ломая при этом остальные доступы

John-D Автор вопроса
Victooor
Смысла хранить много. Например это токены доступа ...

Ну в данном случае идёт речь активация емайла ну и акаунта. По факту оба варианта это активация емайла. Только один на смену емайла а другой при регистрации акаунта.

делайте второй. там времени больше на полчаса, вы часть уже потратили в чате

John-D Автор вопроса
Михаил Парфёнов
делайте второй. там времени больше на полчаса, вы ...

Например для меня то что я потерял в чате, это не важно. Самое главное найти ответ. Дела по проектированию структуры это что то что за 5 минут не выучешь. Только с опытом.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта