При регистрации на сайте есть чек-бокс, который говорит о том, что пользователь принимает условия и правила использования сайта. Пока чек-бокс не выделен, кнопка "Зарегистрироваться" неактивна и не может быть нажата. Когда чек-бокс выделен, то кнопка "Зарегистрироваться" становится активной, пользователь может выполнить регистрацию. При нажатии на кнопку "Зарегистрироваться" выполняется запрос к бекенду.
Достаточно ли такого ограничения доступности кнопки "Зарегистрироваться" в UI для корректной реализации принятия пользователем условий и правил использования сайта? Получается, что факт выполнения запроса к бекенду на регистрацию подразумевает, что пользователь согласился с условиями и правилами. На бекенде в явном виде ничего не хранится о том, что пользователь согласился с правилами. Факт наличия записи пользователя в таблице БД подразумевает, что пользователь согласился с условиями и правилами.
Или же факт согласия с условиями и правилами использования сайта должен быть как-то явно передан в теле запроса к бекенду (например, флаг со значением true), а в БД в явном виде должна быть таблица или поле в таблице для хранения факта принятия пользователем условий и правил?
Достаточно первого варианта.
И не подсказывайте юристам. У них будет реакция: "А что, так можно было?! Тогда с сегодняшнего дня будем требовать от всех по втрому варианту!" ;)
Если кнопка регистрации неактивна, значит регистрация без принятия условий невозможна.
Значит на бэке следует проверять состояние флажка и отклонять регистрацию.
Если у вас вдруг можно регнуться без принятия условий, то вам следует хранить состояние флажка в профиле пользователя.
Обычно делают так: "Продолжая пользоваться ..., вы принимаете условия пользования." Никаких галочек или соглашений, только белая ссылка 6 pt на белом фоне в нижнем углу страницы на текст оферты.
Вот пример хорошо различимого текста. Трудно поспорить, что между кнопками "зарегистрироваться без смс и регистрации" и "регистрируясь, вы продаёте душу" существует огромное отличие. И это ещё более менее нормальный сайт и с настольного компьютера на большом экране.
Факт того, что пользователь продолжает пользоваться сайтом, считается принятием оферты. Собственно, в этом и есть суть оферты, что ее нигде никак не надо подписывать второй стороне. Галочка ставится отчасти для защиты от ботов, отчасти для того, чтобы рядом добавить еще одну галочку согласия на получение рекламных рассылок. Юридической силы она не имеет в любом случае.
Кстати, принятие оферты может вообще выполняться без запроса к бэкэнду)
И очень рекомендую почитать тексты оферт крупных сервисов типа Яндекса, там много интересного можно найти, в том числе и ответы на Ваш вопрос.