Прошу протестировать вариант реализации логинов в InstantCMS 2. Если этот вариант окажется удачным, понравится пользователям и в нём будут устранены ошибки, тогда можно будет просить разработчиков InstantCMS 2 включить его в систему «из коробки». Поэтому нужна ваша активная помощь.
Встроить логины в Двойку обычным компонентом и хуками не представляется возможным, поэтому пришлось править много системных файлов. Я просмотрел и проверил всё, что смог. Но всё же предупреждаю:
• Логины вместо id в адресах профилей пользователей: site.ru/users/vasya (спасибо Fuze за идеи по оптимальной подстановке, а также за помощь и понимание).
• Есть возможность использовать логины в адресах страниц через переменную шаблона {user_login}. Например, можно создавать блоги с адресами site.ru/blogs/vasya.
• Возможность «по горячему» на работающем сайте переключаться из режима «логины» в «id» и обратно. Но зачем это нужно – не знаю. И при этом есть нюансы (см. ниже в «Особенности»)
• При включении логинов можно скрыть профили реальных админов сайта, задав им какие-то нестандартные логины вместо id=1 (или любого другого). При условии, что главный админ не будет модерировать контент, а будет только управлять сайтом, этот логин никто не узнает. Он будет выглядеть как обычный пользователь. Это повышает безопасность.
• Опциональная авторизация по логину вместо email. Это привычно для пользователей и желаемо многими вебмастерами. А также будет востребовано для корпоративных сайтов при входе сотрудников на сайт. Или при сопоставлении (связывании) пользователей сайта с пользователями корпоративной интрасети по LDAP (Active Directory, Samba). А также для сайтов с пользователями-юрлицами (авторизация по коду ОКПО фирмы, например).
• При выборе логина во время регистрации новому пользователю сразу будет показан адрес его будущей страницы с этим логином – это наглядно и повышает вероятность выбора красивых логинов пользователями (спасибо Нил™ за идею и пример кода).
• Полное управление логинами в Админке. При отключении логинов, связанные с ними поля и функции также скрываются в Админке.
• Дополнительная возможность: галка «Согласен с правилами сайта» при регистрации.
Галка «Запрашивать логин и использовать его в адресах вместо id»
Если она включена, то во время регистрации пользователю предлагается заполнить новое поле «Логин». При вводе логина в это поле пользователю тут же показывается, как будет выглядеть адрес его страницы. Допустимые символы: маленькие латинские буквы, цифры и «подчёркивание». Введённый логин проверяется на уникальность и сохраняется в новое поле login таблицы cms_users вместе с остальными введёнными данными.
В дальнейшем эти логины подставляются в адреса страниц пользовательских профилей и, при задании соответствующих шаблонов адресов типов контента, в адреса контента. Также при включении этой галки добавляются поля логинов в Админке.
У пользователей нет возможности изменить логины самостоятельно. Это может сделать только админ в Админке.
Если эта галка выключена, то при регистрации логин пользователя не запрашивается, а в поле login таблицы cms_users подставляются id (для возможности переключиться в режим с логинами. В адреса страниц пользовательских профилей подставляются id. Поля логинов в Админке скрыты.
Галка «Авторизация по логину вместо e-mail»
Если включена, то при авторизации запрашивается логин, если выключена – email.
Поле «Запрещенные логины»
Аналогично полю «Запрещенные никнеймы». Можно использовать маски.
Поле «Ссылка на "Правила сайта"»
Если это поле заполнено, то при регистрации внизу под всеми полями появляется галка «Я подтверждаю, что прочитал(-а) и принимаю "Пользовательское соглашение"», где под "Пользовательское соглашение" подставляется ссылка из этого поля. Кнопка «Продолжить» появляется лишь при включении галки согласия с правилами. При выключенной галке эта кнопка скрывается.
По идее, должно работать переименование users во что-то другое (см в документации «Замена URL компонентов»).
2. Я не нашёл способа автоматической подстановки логина вместо id в меню. Поэтому в пункте «Мой профиль» в «Персональном меню» нужно будет вручную изменять ссылку на users/{user.login} при логинах и обратно на users/{user.id} при id.
3. Если в ленту активности попало событие «Дружба пользователей», то в БД сохраняется адрес профиля второго пользователя в том виде, в каком он построился на момент дружбы (по id или по логину). И при смене режима подстановки в адреса id/логинов этот адрес уже не меняется и по нему профиль пользователя может уже оказаться недоступен.
4. При использовании модулей регистрации новых пользователей из соцсетей, может понадобиться доработка этих модулей, чтобы они сохраняли логины пользователей или подставляли вместо логинов в поле login их id.
Вход по логину admin с заданным вами паролем для Администратора.
А далее заходите в настройки компонента «Авторизация и регистрация», включайте/выключаете логины и смотрите, удобно ли пользоваться, есть ли ошибки. Все найденные ошибки и умные мысли пишите тут в комментариях.
Скачать пакет установки версии 0.2.240
Изменения в версии 0.2.240:
— Исправлена ошибка при обновлении аватара.
— Исправлены ошибки обновления БД. Теперь id копируются в логины для всех пользователей с пустыми логинами, кроме id=1.
UPD 28.02.2016
Создал на форуме обсуждение вариантов визуальной идентификации пользователей на сайте Ники и логины на сайте.
Встроить логины в Двойку обычным компонентом и хуками не представляется возможным, поэтому пришлось править много системных файлов. Я просмотрел и проверил всё, что смог. Но всё же предупреждаю:
Данный вариант НЕ ПРЕДНАЗНАЧЕН для использования в реальных проектах.
Он выложен тут ТОЛЬКО ДЛЯ ТЕСТИРОВАНИЯ.
Возможности:
• Логины — уникальный идентификатор пользователя на сайте. Теперь на сайте не будет двух пользователей с одинаковыми именами. Можно в шаблонах вместо ников выводить логины. Или к никам добавлять логины в скобках. Или ещё как угодно это сочетать.• Логины вместо id в адресах профилей пользователей: site.ru/users/vasya (спасибо Fuze за идеи по оптимальной подстановке, а также за помощь и понимание).
• Есть возможность использовать логины в адресах страниц через переменную шаблона {user_login}. Например, можно создавать блоги с адресами site.ru/blogs/vasya.
• Возможность «по горячему» на работающем сайте переключаться из режима «логины» в «id» и обратно. Но зачем это нужно – не знаю. И при этом есть нюансы (см. ниже в «Особенности»)
• При включении логинов можно скрыть профили реальных админов сайта, задав им какие-то нестандартные логины вместо id=1 (или любого другого). При условии, что главный админ не будет модерировать контент, а будет только управлять сайтом, этот логин никто не узнает. Он будет выглядеть как обычный пользователь. Это повышает безопасность.
• Опциональная авторизация по логину вместо email. Это привычно для пользователей и желаемо многими вебмастерами. А также будет востребовано для корпоративных сайтов при входе сотрудников на сайт. Или при сопоставлении (связывании) пользователей сайта с пользователями корпоративной интрасети по LDAP (Active Directory, Samba). А также для сайтов с пользователями-юрлицами (авторизация по коду ОКПО фирмы, например).
• При выборе логина во время регистрации новому пользователю сразу будет показан адрес его будущей страницы с этим логином – это наглядно и повышает вероятность выбора красивых логинов пользователями (спасибо Нил™ за идею и пример кода).
• Полное управление логинами в Админке. При отключении логинов, связанные с ними поля и функции также скрываются в Админке.
• Дополнительная возможность: галка «Согласен с правилами сайта» при регистрации.
Как всё работает:
Всё очень просто. В настройках компонента «Авторизация и регистрация появились новые опции.Галка «Запрашивать логин и использовать его в адресах вместо id»
Если она включена, то во время регистрации пользователю предлагается заполнить новое поле «Логин». При вводе логина в это поле пользователю тут же показывается, как будет выглядеть адрес его страницы. Допустимые символы: маленькие латинские буквы, цифры и «подчёркивание». Введённый логин проверяется на уникальность и сохраняется в новое поле login таблицы cms_users вместе с остальными введёнными данными.
В дальнейшем эти логины подставляются в адреса страниц пользовательских профилей и, при задании соответствующих шаблонов адресов типов контента, в адреса контента. Также при включении этой галки добавляются поля логинов в Админке.
У пользователей нет возможности изменить логины самостоятельно. Это может сделать только админ в Админке.
Если эта галка выключена, то при регистрации логин пользователя не запрашивается, а в поле login таблицы cms_users подставляются id (для возможности переключиться в режим с логинами. В адреса страниц пользовательских профилей подставляются id. Поля логинов в Админке скрыты.
Галка «Авторизация по логину вместо e-mail»
Если включена, то при авторизации запрашивается логин, если выключена – email.
Поле «Запрещенные логины»
Аналогично полю «Запрещенные никнеймы». Можно использовать маски.
Поле «Ссылка на "Правила сайта"»
Если это поле заполнено, то при регистрации внизу под всеми полями появляется галка «Я подтверждаю, что прочитал(-а) и принимаю "Пользовательское соглашение"», где под "Пользовательское соглашение" подставляется ссылка из этого поля. Кнопка «Продолжить» появляется лишь при включении галки согласия с правилами. При выключенной галке эта кнопка скрывается.
Информация для разработчиков компонентов и шаблонов:
Чтобы ваш продукт был совместим с логинами в данной реализации, вам нужно убедиться, что везде в вашем коде, где создаются адреса страниц пользовательских профилей, используется вызов функций href_to(), а не простое объединение строк. Вообще-то так и должно быть по стандарту, но мало ли… Замена id на логины в адресах производится именно в этих функциях.«Особенности» реализации:
1. Логины вместо id подставляются только в адреса пользовательских страниц (контроллера users) вида site.ru/users/id или site.ru//users/id/что-то_ещё. В служебных адресах вида site.ru/users/action_name/id логины не подставляются и там в любом режиме остаются id. То есть подстановка делается только там, где id стоит на первом месте после имени контроллера users. Это сделано для ускорения работы подстановки.По идее, должно работать переименование users во что-то другое (см в документации «Замена URL компонентов»).
2. Я не нашёл способа автоматической подстановки логина вместо id в меню. Поэтому в пункте «Мой профиль» в «Персональном меню» нужно будет вручную изменять ссылку на users/{user.login} при логинах и обратно на users/{user.id} при id.
3. Если в ленту активности попало событие «Дружба пользователей», то в БД сохраняется адрес профиля второго пользователя в том виде, в каком он построился на момент дружбы (по id или по логину). И при смене режима подстановки в адреса id/логинов этот адрес уже не меняется и по нему профиль пользователя может уже оказаться недоступен.
4. При использовании модулей регистрации новых пользователей из соцсетей, может понадобиться доработка этих модулей, чтобы они сохраняли логины пользователей или подставляли вместо логинов в поле login их id.
Как тестировать:
Скачайте пакет установки и стандартным образом установите его в новую InstantCMS 2.4.0 с демо-данными. Замена системных файлов и добавление/обновление нужных полей БД будет выполнено автоматически. Также автоматически включатся логины.Вход по логину admin с заданным вами паролем для Администратора.
А далее заходите в настройки компонента «Авторизация и регистрация», включайте/выключаете логины и смотрите, удобно ли пользоваться, есть ли ошибки. Все найденные ошибки и умные мысли пишите тут в комментариях.
Скачать пакет установки версии 0.2.240
Заранее спасибо за помощь!
UPD 23.02.2016Изменения в версии 0.2.240:
— Исправлена ошибка при обновлении аватара.
— Исправлены ошибки обновления БД. Теперь id копируются в логины для всех пользователей с пустыми логинами, кроме id=1.
UPD 28.02.2016
Создал на форуме обсуждение вариантов визуальной идентификации пользователей на сайте Ники и логины на сайте.
Реклама #
reload 8 лет назад #
WebMan 8 лет назад #
Если найдутся желающие пользоваться такой авторизацией и если разработчики поддержат такой универсальный вариант - сделаю.
Кому ещё нужен такой вариант, отзовитесь!
Ваша логика понятна. Но пока остановлюсь на варианте запроса логина при регистрации, так как отложенная схема сильно усложнит реализацию. Но в принципе, подумаю про хук, который позволит сторонним разработчикам реализовывать подобные сложные сценарии. Записал себе, спасибо.
Ещё я сначала думал про вариант с раздельными опциями "Запрашивать логин при регистрации" и "Подставлять логины в адреса". И даже в текущую реализацию всё для этого уже заложено. Но подстановка логинов в адреса вместо id занимает дополнительное время. Небольшое, менее 0.5% времени скрипта на одного уникального пользователя на странице. То есть, например, для 20 разных пользователей на странице замедление будет менее 10%. Для одинаковых ссылок на пользователей логины кэшируются и времени не занимают. Если сделать такой универсальный вариант, то придётся подставлять логины всегда, даже при использовании id. Мне как-то жалко утяжелять систему там, где это не нужно.
Ris 8 лет назад #
http://instantcms.ru/forum/thread21606-1.html
Там вполне возможно было авторизоваться и по емейлу.
Попробую прикрутить проверку на уникальность именно никнейма...
WebMan 8 лет назад #
Сделать универсальную авторизацию по логину или по мылу можно. Можно даже до проверки по БД выяснять, что именно пришло, логин или почтовый адрес, а потом искать только одно сочетание.
Вопрос не в возможности. Вопрос: зачем?
Ris 8 лет назад #
Зачем? Для удобства пользователей. Сколько раз бывало, что юзер помнит ник и не помнит емайл, с которого регистрировался и наоборот, мыло помнит, а логин - нет.
По поводу самого дополнения:
Копирование системных файлов почему-то не происходит, приходится дублировать вручную.
Хотя, возможно, это проблема самого движка.
WebMan 8 лет назад #
Универсальную авторизацию по логину и по мылу сделать постараюсь. Но реально не знаю, насколько она будет востребована.
У меня копирование при установке и обновлении работает. Убедитесь, что при установке компонента у Вас отключена галка "Пропустить этот шаг". Если она включена, то копирование пропускается.
Ris 8 лет назад #
Возможно проблема у меня на локальном опенсервере. Да у меня еще и php7 установлено...
Ваше решение мне тоже не подойдет, потому что большинство логинов на сайте с большой буквы.
Для нового сайта отличное решение!
WebMan 8 лет назад #
В адреса будут подставляться логины в том виде, в котором они хранятся в БД. Для URL лучше, если все буквы логина будут прописными. Поэтому сохранение так и сделано. Но для старых логинов из первой ветки регистр букв в адресах останется прежним.
Ris 8 лет назад #
А вообще... вижу всё больше полезных дополнений, которые добавляют во второй инстант полезный функционал из первого. Может разработчикам обратить внимание на это?
WebMan 8 лет назад #
То есть, зашёл по своему логину, открыл свой профиль и увидел.
Ris 8 лет назад #
WebMan 8 лет назад #
Алексей Т 8 лет назад #
Забрал на тест
WebMan 8 лет назад #
sosed 8 лет назад #
При установке на сайт вызывает ошибку:
sosed 8 лет назад #
sosed 8 лет назад #
sosed 8 лет назад #
sosed 8 лет назад #
WebMan 8 лет назад #
WebMan 8 лет назад #
WebMan 8 лет назад #
WebMan 8 лет назад #
- Исправлена ошибка при обновлении аватара.
- Исправлены ошибки обновления БД. Теперь id копируются в логины для всех пользователей с пустыми логинами, кроме id=1.
Версию 0.2.240 можно устанавливать и как первую установку на свежую Двойку 2.4.0, и как обновление уже установленных логинов версии 0.1.240.
Друзья, с праздником!
sosed 8 лет назад #
Как сейчас все обстоит. Пользователь меняет никнейм с Миши на Олю без проблем. Может на сайте быть хоть сколько Оль, Вась и т.п. Это недопустимо, когда пользователи с одними никнеймами на сайте общаются.
Вы идете к какой-то своей, более усложненной цели, мне же нужно только то, что я описал. Этого вполне достаточно. К примеру, у меня есть жители поселка на сайте, соседи, они регистрируются, начинают общаться между собой, и тут сложность, три пользователя под одним никнеймом. Как разрулить? Админ может (должен иметь возможность) поменять, сам житель (если захочет) может поменять, но лучше не допускать. Назовется пользователь Администратором (кто помешает в двойке?) и будет прикалываться по сайту. Вот такие проблемы у меня, да и у всех наверно, кто реально сайт создает для общения людей.
WebMan 8 лет назад #
А если это сайт региона, а не посёлка? Или межрегиональный? Тогда таких одинаковых И.И.И. будет ещё больше.
2. Ники содержат практически ненормированные символы. Это недопустимо для входа.
3. Можно легко сделать визуально похожие, но по символам разные ники, заменив одну или более русских букв на латинские похожие. Никто не заметит. С логинами это не прокатит.
Над этой проблемой ломают головы и копья уже десятки лет. Реальных решений, как я вижу, только два:
- Использовать только уникальные логины. Они же - ники на сайте. По ним же и вход. Как на хабре, например.
- Уникальные логины или id для задания адресов страниц пользователя + неуникальные ники. Рядом с ником или при наведении на него мышки пишется ник и другие подробности о пользователе. Вход по логину или почте.
Вариант с логинами, который я предлагаю, позволит сделать любой из этих вариантов. На крайний случай, сделаю я или разработчики галку "уникальные" для ников. Но ещё раз подтверждаю, что по никам входа не будет.
Видимо Вы не очень внимательно смотрели настройки Двойки и не читали в этом топике описание настроек логинов. Там есть поля для задания запрещённых к регистрации логинов и ников. Причём с масками. Например, можно запретить ники "Админ*", как это уже, кстати, по умолчанию сделано в Двойке. И описанный Вами случай отпадёт сам собой.
Ris 8 лет назад #
А второй Иван Иваныч Иванов пусть придумывает другой ник. Александру Панкратову - Черному не в лом было и Иван Иваныч не переломится.
Kreator 8 лет назад #
Ris 8 лет назад #
Там ниже есть ссылка на тему, где Лоадырь подсказал решение.
sosed 8 лет назад #
Ris 8 лет назад #
Последний пост в теме: http://instantcms.ru/forum/thread22549.html
sosed 8 лет назад #
sosed 8 лет назад #
Далее, в профиле пользователя, в поле никнейм доступ для чтения оставил всем, а доступ для изменения дал только админу.
Результат: После при регистрации не сообщает о дубле. После регистрации поле никнейм остается пустым!.
Администратор может использовать данное право править и называет пользователя самостоятельно. Только тогда на сайте у пользователя появляется имя.
Позволяет ли движок админу создать дубль никнейма? Да, заходишь в пользователи и пишешь хоть что в никнейм.
Вопрос остался: как запретить пользователю изменять свой никнейм и оставить это право у админа?
WebMan 8 лет назад #
sosed 8 лет назад #
WebMan 8 лет назад #
Давайте соберём в список основные варианты:
1. Самый простой: показывать только логины: @vasya. Очень просто, наглядно и заставляет пользователей сразу придумывать подходящие логины. Но учитывая ограничения на символы логинов, при большом количестве пользователей будет вызывать затруднения при придумывании новых логинов. Можно к логинам добавлять символ "@" слева - это уже становится общепринятым. Как на хабре, например.
Дополнительный плюс - на мобильных устройствах сразу виден уникальный логин.
2. Показывать ники с ссылками на профиль: Вася Пупкин. При наведении мышки в строке состояния браузера будет виден адрес профиля пользователя с его логином (если включена подстановка логинов в адреса). Так сделано в первой ветке Инстанта.
На мобильных устройствах можно увидеть логин пользователя только при переходе по ссылке в его профиль.
3. Показывать рядом с никами @логины: Вася Пупкин @vasya. Можно оформлять логины и ники разными цветами для наглядности. Сходу не вспомню, где видел. Наглядно, но длинно. Зато очень чётко определяет пользователя даже на мобильных устройствах.
4. Показывать ники, а при наведении мышки всплывает окно с инфой о пользователе. Пример - Facebook. Это очень наглядно при просмотре на компах. Но на мобильных устройствах это окошко показать нет возможности, поскольку нет курсора мыши и навести нечего.
5. Показывать @логины, а при наведении мышки всплывает окно с инфой о пользователе. Пример - Твиттер. Ситуация аналогична п.4. Только на мобильных устройствах сразу виден логин, что очень удобно.
sosed 8 лет назад #
WebMan 8 лет назад #
sosed 8 лет назад #
WebMan 8 лет назад #
Soulfood 8 лет назад #
Или я что-то не так делаю?
WebMan 8 лет назад #
WebMan 8 лет назад #
BoAnRo 8 лет назад #
Спасибо большое WebMan, что начал работу в этом направлении. На выходных установлю дополнение на тестовый сайт и протестирую что смогу.
Нико 8 лет назад #
Отключить функцию id вообще из админки он не нужен потому что может случится путаница нужно определится или это или то + добавить уведомления когда пишут в статусах + упоминания memories @ivan + хештеги.
А да и само главное нужно убрать поле где пользователь вписывает свою ссылку, потому что не каждый привык это делать, пользователь не поймет что это и уйдет от сайта, то есть если пользователь вписал логин пусть этот же логин будет ему ссылкой + и поставить редактирование пользователя, где он может отредактировать свою ссылку с лимитом 3 раза. если это возможно. остальное все супер.
Нико 8 лет назад #
Откройте файл /system/controllers/auth/actions/register.php
Строка 6 замените это
добавляем код где то внизу
Capitan 8 лет назад #
WebMan 8 лет назад #
Здесь описан всего лишь вариант хака движка. Новая, более универсальная версия такого хака в другой записи моего блога.