Не многие знают, но в MODX уже из коробки существует мощная система разделения прав пользователей. Кроме того, компонент Login позволяет создать на сайте самую настоящую систему регистрации, авторизации, личного кабинета пользователей. Предлагаю разобрать возможности этого компонента и некоторые нюансы доступа пользователей.
Для начала, создадим две системные настройки, которые избавят нас от проблем с кодировками и неверным отображением некоторых страниц в браузере. В разделе «Система» → «Настройки системы» нажимаем кнопку «Создать новый параметр». В поле «Ключ» указываем error_page_header, а в поле «Значение» — HTTP/1.0 404 Not Found и нажимаем сохранить. Так же создаем второй параметр — ключ: unauthorized_page_header, значение: HTTP/1.0 401 Unauthorized
После этого зайдите в «Управление пакетами», найдите и установите дополнение Login.
Теперь создадим странички (по ссылкам код, который нужно вставить в контент ресурсов):
- Регистрация (2)
- Авторизация (3)
- Личный кабинет (4)
В коде на странице «Регистрация» в параметре activationResourceId указываем id ресурса «Подтверждение регистрации»
В коде страницы «Подтверждение регистрации» в трех местах указываем id ресурса «Личный кабинет»: в параметре errorPage, на 8 и на 11 строчках.
На странице авторизации указываем правильную ссылку на страницу восстановления пароля, а на странице личного кабинета — ссылки на редактирование и на смену пароля.
У всех этих ресурсов сразу уберите галочки «Использовать HTML редактор», чтобы наш код не обрабатывался установленным визуальным редактором.
Далее нужно создать группу пользователей, чтобы можно было дать им какие-либо преимущества. Заходим в раздел «Безопасность» → «Контроль доступа», нажимаем кнопку «Новая группа пользователей», в поле «Имя» пишем Users, отмечаем галочку «Создать параллельную группу ресурсов», «Политика бэкенда» указываем (без политики)
Затем идем в «Содержимое» → «Группы ресурсов» и перетаскиваем из правого дерева в группу «Users» следующие ресурсы:
- Личный кабинет
- Изменение пароля
- Редактирование данных
Теперь если неавторизованный пользователь откроет одну из этих страниц, он увидит ошибку 404 — для него таких страниц не существует. Но нас такое поведение не устраивает. Мы хотим, чтобы при открытии страницы личного кабинета отображалась форма авторизации. Для этого идем в настройки системы и находим настройку unauthorized_page — Страница ошибки 403 «Доступ запрещен», и указываем в ней id страницы «Авторизация». У меня это — 3. Однако поведение все еще не изменится.
Просто анонимному пользователю MODX не хочет раскрывать информацию даже о том, что такой ресурс существует. Чтобы разрешить отображение ошибки 403, где это нужно, идем в «Безопасность» → «Контроль доступа», нажимаем правой кнопкой мыши на группе (аноним) и выбираем «Редактировать». Переходим на вкладку «Доступ к группам ресурсов», добавляем группу:
- Группа — Users,
- контекст — web,
- минимальная роль — Member,
- политика доступа — Load only
Теперь при входе в личный кабинет нужно будет сначала ввести логин (e-mail) и пароль.
Как видите, все довольно просто. Внешний вид форм можно менять с помощью CSS, а текст писем для активации пользователя или восстановления пароля можно отредактировать в соответствующих чанках в категории Login.
2 формы авторизации?
Пут до редактора: site.ru/account/profile
Когда нажимаю сохранить переходит site.ru/account/profile/account/profile
Без Friendliy url все работает без проблем.
Версия Modx REVO 2.2.13
Как решит эту проблему?
Доступ к ресурсам добавил для всех контекстов и Для каждого контекста (языка) делал свои файлы регистрации, авторизации и т.д. Так же Личный кабинет, изменение пароля и Редактирование тоже со всех контекстов перетащил в Группе ресурсов.
UPD Илья, подскажите, а [[!ConfirmRegister? &authenticate=`1` &errorPage=`45`]] в Подтверждении регистрации тут &errorPage=`45`должен id Личного кабинета стоять?
поставьте слеш /
типа
вместо
Напишите mrogalsky@yandex.ru — скину примеры кода
А у меня почему то функция разлогинивания перестала работать(
Что может быть?
ЧПУ да, работают через translit
Т.е. для каждого вообще свою страницу, но никак не могу найти как это сделать, может у Вас есть решение или идея?
Ну и в выборках добавьте условие {«created_by»: [[!modx.user.id]]}
вопрос
1) выводит подсказки на англиском языке как поправить
2) пароль меняет а сообщение не выводит помогите решить хотелось бы как и редактирование данных
Спасибо за урок
За уроки большое спасибо!
А как можно сделать, чтобы пользователь после подтверждения регистрации был сразу активен. Сейчас администратору приходится в админ-панели каждого пользователя активировать.
Сделано всё по инструкции, но страница личного кабинета почему-то всё равно доступна для просмотра незарегистрированным пользователям. Изменение пароля и редактирование данных успешно перенаправляет на страницу 403, а личный кабинет открывается для анонимов, хотя тоже обозначен для просмотра только зарегистрированным пользователям. В чём может быть проблема? Может, в вызове [[!Profile]] что-то надо дополнительно настроить?
Пока решила проблему, добавив сниппет [[isLoggedIn]] перед вызовом [[!Profile]], но это не выход же…
Безопасность → Перезагрузить права доступа, а после этого очистить кеш сайта и браузера. Изменив адрес страницы вы заставили MODX создать для нее уже новый кеш, с новыми параметрами. Так что такой вариант решения тоже имеет место быть)
А как можно сделать, чтобы пользователь после подтверждения регистрации был сразу активен. Сейчас администратору приходится в админ-панели каждого пользователя активировать.
Не приходит письмо подтверждения, в чем может быть проблема?
Пользователь создается, но неактивный.
Заранее спасибо
Действительно не работала почта, после настройки все работает отлично! Спасибо!
Подскажите пожалуйста, как сделать, чтобы пользователь автоматом попадал в определенную группу пользователей?
Нашел параметр, при вызове Register
Поменял на имя своей группы…
Подскажите, как сделать, суть в том, чтобы пользователям из груп 0 (аноним),2,3,4 и оптовым выводить разные цены
Стоит SHopkeeper и MODX последних версий
Вот код страницы:
Спасибо!
Как же всё таки сделать загрузку аватара пользователями с фронтенда???
Во-первых, надо дать пользователю возможность загружать файлы на сайт. Это уже проблематично:
Во-вторых, картинку надо позволить изменять, а, значит, старые надо как-то удалять. Тут тоже нужен свой алгоритм.
В-третьих, все эти загрузки/удаления нужно как-то записывать в базу данных и привязывать к пользователю.
Вот поэтому в уроках нигде про аватар и не пишут. Это продвинутый уровень.
Подскажите — как заставить UpdateProfile делать апдейт выбранного пользователя (например по id или email)?
Например я зашел под пользователем root
Хочу изменить данные пользователя testUser
Вызываю UpdateProfile так
Данные в форму вносятся от юзера testUser. Но при изменении данных — все они сохраняются как данные юзера root.
Что я делаю не так, или как это можно исправить?
Заранее благодарен
http://modtask.ru/
Логин: root@root.ru
Пароль: rootroot
В личном кабинете есть ссылка на редактирование своего профиля и на редактирование чужого профиля.
Буду признателен
Все что здесь написано — все работает.
У меня есть вопрос. Допустим у меня в шапке на главной странице(да и на всех других страницах) есть две ссылки Вход и Регистрация.
Как сделать так чтобы после авторизации вместо Вход было написано Выход, а вместо Регистрация — имя пользователя? Дайте хотя-бы подсказку. Спасибо.
Как-то так.
Есть еще вопрос, если не сложно, подскажите, пожалуйста.
Хочу в этой форме регистрации поменять «Имя и фамилия» на Логин, и чтобы авторизация на сайте происходила именно по логину, а не по email. Я так понимаю надо изменять код или дополнять его. Заранее спасибо!
Вопрос наверно не по теме.
Я делаю вход и регистрацию на сайте по вашему уроку, но с использованием модального окна. Можете посмотреть -> ссылка.
Авторизация работает.
Проблема в следующем. Жмем «Регистрация», открывается модальное окно с формой(id=«modal_form2» с вашим кодом(страница Регистрация)). Если заполнить форму регистрации правильно, то по идее появляется сообщение, что «Нужно нужно подтверждение по email», а если форму заполнить с ошибками, то должно появится сообщение, что что-то заполнено неправильно. Только вот после нажатия на кнопку Зарегистрироваться, модальное окно закрывается), а хотелось бы чтобы оно не закрывалось, а видно было сообщение об ошибке или об успешной регистрации.(и только после этого можно было бы самостоятельно закрыть модальное окно)
Вот мой код JS
Если поможете, буду очень признателен!
Появился вопрос по предыдущему моему посту))
В чанке chunkWithUsername есть строчка
Когда жмем Выход, то происходит перенаправление на ресурс id 1
Как сделать чтобы при выходе пользователь оставался на той же странице? Спасибо.
Нужно устанавливать Jevix? Как он используется в данном случае?
Сделал, вроде как, по инструкции, выполнены все пункты.
Юзер, при регистрации, создается, в нужную группу — входит.
А с чем может быть связано, когда при подтверждении регистрации (копирование ссылки вида из письма в адресную строку браузера), «кидает» на страницу «Авторизация»?
С уважением.
Попробую удалить пользователя, выйти из админки и выполнить всю процедуру заново.
Регистрация. При подтверждении происходит то же самое.
Не подскажете, в каком еще направлении можно было бы поискать?
Все настроил, вывел в сайдбар ссылки на Регистрацию, Авторизацию и Личный кабинет но почему то анонимным пользователям не открывается ни одна страница, сразу переходит на страницу 404. Что может быть? razbormob.ru/
- Личный кабинет
- Изменение пароля
- Редактирование данных
Остальные должны быть без всякой группы.Кроме того:
вот это поле и вот вызов сниппета , но хоть ты тресни, а при попытке авторизоваться через эту форму, меня выкидывает на главную. Залогинивание происходит если с главной вернуться. Вызов первого логина работает корректно. Не подскажите, в чем еще может быть проблема?
Сразу возник другой вопрос: как возвратить юзера на страницу, с которой он зашел на страницу авторизации?
Т.е. Если я просматриваю новость, захожу на страницу авторизации, авторизовываюсь, меня перекидывает на главную, а что бы на страницу с той самой новостью? указывать [[*id]]?
p.s.
А как сделать, что бы страницы Восстановление пароля, Регистрация, Подтверждение регистрации было доступно только анонимам?
2. Создайте сниппет, например, такой
И вызывайте его на нужных страницах:
А так же форма «восстановление пароля» (просто пустая страница)
Не выдаются ошибки типа «Это поле требуется. Это поле должно быть по крайней мере 6 символов в длинну.» на странице регистрации
и так далее… что может быть?
P.S. всё отображается в случае если я в админке. Иначе просто пустые страницы или отсутствует вывод чанков (снипетов)
Именно полным удалением и новой установкой, а не через кнопку «переустановить»
Почему при попытке зайти в личный кабинет пользователя перекидывает на страницу авторизации хостинга (godaddy)?
В чем может быть дело?
Ошибка в мануале:
Доступ к группам ресурсов, добавляем группу:
Группа — Users,
контекст — web,
минимальная роль — Member,
политика доступа — Load only
политика доступа должна быть Resource
Пруф
Значит, никакой ошибки и не было. Для пользователей (аноним) должен быть доступ к группе ресурсов Users с политикой доступа Load Only.
Если поставить политику доступа Resource, то анонимные пользователи будут иметь права редактирования ресурсов. А нам надо лишь, чтобы аноним мог «загрузить» ресурс. Тогда получится ошибка доступа, и будет выведена форма авторизации, а не страница 404 ошибки.
Почему после замены
на
не работает отправка формы?
Чанк
Вызов
А ларчик просто открывался...
Если можно, бога ради, этот пункт чуть подробнее, у меня не перетаскиваются:
Все остальное работает безукоризенно
Версия Modx-2.3.5-pl
Заранее признателен.
Все расписано, просто экстра.
В новых версиях MODX эта страничка находится в «Сайт» → «Группы ресурсов»
Илья, Спасибо большое!
У меня еще стоят HybridAuth и Tickets, которые я настраивал почти наугад, вроде работает. А тут решил сделать еще и c Login'ом не пойму как это сращивается.
В общем пользователь может только войти или выйти, но не редактировать профиль (работает как надо только под админом).
Я думаю, что это групповые и политические настройки неверные.
У меня есть два основных вида пользователей: одни могут писать посты и оставлять комменты (Writers), а другие могут только оставлять комменты (Users); ну Админ и Аноним, конечно же присутсвуют.
Группа Writers (которые могут создавать посты и комментить)
доступ к контекстам:
web — TicketManager — TicketAdmin
mgr — TicketManager — TicketAdmin
mgr — TicketManager — TicketUserPolicy
доступ к группам ресурсов:
как в уроке Users-Member-LoadOnly
Группа Users (которые могут только комментить)
доступ к контекстам:
web — Member — TicketUserPolicy
доступ к группам ресурсов:
как в уроке Users-Member-LoadOnly
Аноним
доступ к группам ресурсов:
как в уроке Users-Member-LoadOnly
Автор HybridAuth, я думаю, скажет, что можно купить Office, но мне не нужен его функционал, да и опыт был бы ценный.
Когда пользователь переходит по ссылке из почту, чтобы подтвердить регистрацию, вылетает такая ошибка
Fatal error: Call to protected method xPDOObject::_setRaw() from context 'LoginConfirmRegisterController' in /home/worldski/public_html/core/components/login/controllers/web/ConfirmRegister.php on line 58
Fatal error: Undefined class constant 'LOG_LEVEL_ERROR' in /home/worldski/public_html/core/model/modx/error/moderrorhandler.class.php on line 111
Раньше такого не было, пока не обновила пакет Login.
При подключении [[!ConfirmRegister? &authenticate=`26` &errorPage=`26`]] (26 это ид личного кабинет) отображается главная страница, при этом пользователь при переходе по ссылке из письма не может получить статус активированного пользователя… с чем это может быть связанно?
з.ы. первый раз промахнулся, пардонте))
Сейчас потуплю еще пол часика, если найду ответ отпишусь!
Возникает проблема при переходе по ссылке из письма завершения регистрации, выдает ошибку 500, и регистрация не подтверждается. А потом, если попробовать войти под данными пользователя, которыми регистрировался, пишет «пользователь заблокирован». Что это может быть?
и попробуйте с вызовом сниппета на пустом шаблоне сделать переход. Тогда должен появиться и текст ошибки. По нему можно будет что-то понять
github.com/gadgetto/Login/blob/develop/core/components/login/controllers/web/ConfirmRegister.php
github.com/gadgetto/Login/blob/develop/core/components/login/model/login/login.class.php
github.com/gadgetto/Login/blob/develop/core/components/login/docs/changelog.txt
К сожалению патч этих файлов не помог.
Но вот откат на версию login 1.9.0 действительно все проблемы решил.
Еще раз спасибо за информацию!
Андрей.
выдает некоторые варианты, но большинство на английском, изза чего не очень ясны инструкции…
ConfirmRegister? что то не может сделать или к чему то получить доступ. Полюбому. Только изза чего и к чему.
Вообще, вот посмотрите все параметры сниппета. Может, найдете другое решение своей проблемы. Сниппет-то очень мощный и в статье не все возможности описаны.
Вот же, дата стоит: 16 ноября 2013, 21:01
А то с этим стандартным логином у меня уже крыша едет потихоньку))
Так и появилась эта статья. С тех пор, когда мне надо было сделать авторизацию, я просто копировал код отсюда. Поэтому сейчас все нюансы уже вылетели у меня из головы.
Так что, я вам, к сожалению, помочь не смогу.
Конструкция из документации не работает
Все работает прекрасно.
xn--80abladnapzd0axo.xn--p1ai/
Подскажите как сделать уведомление администраторам на два емейла о регистрации нового пользователя.
Буду очень признателен
Анатолий.
Можете подсказать как сделать чтобы копия письма о регистрации пользователя приходила на почту администратору сайта?.. Настроила только сервис уведомлений, но там только почта, а хотелось бы все письмо видеть.
Посмотрите, может что то не так сделано?
Хотел спросить. Вот заметил, что пропадают кнопки редактора к комментам и у вас, и у меня. С чем это связано?
Спасибо!
на странице регистрации
нового пользователя xn--80abda0c7b.xn--p1ai/index.php?id=18 перестало приходить письмо пользователю для активации. Пользователь новый неактивный появляется, а письмо активации ему не приходит.
Пользователей больше 200. Месяца два назад было такое иногда, а сейчас письма активации новые пользователи совсем не получают.
Из формы обратной связи xn--80abda0c7b.xn--p1ai/index.php?id=26 письмо администратору приходит нормально.
В какую сторону копать надо????
Спасибо за подсказку
НО письма не приходят ни о регистрации ни о восстановлении пароля, хотя настройки почты поставил и они работают сниппет ФОРМИТ отправляет письма…
Настроено через SMTP
В чём может быть проблема??? Почему не приходят эти письма???
В Настройки системы — Раздел — Авторизация и безопасность-Имя-Адрес электронной почты изменить на действующий адрес почтового ящика вашего домена. По умолчанию там прописывается и подставляется адрес администратора при установке MODX. а с 16 или 18 мая MAIL.RU установил запрет на отправку писем с чужого почтового сервера, GMAIL.COM и YANDEX.RU тоже самое.
Мне этот вариант помог.
[[+phone:notempty=`Телефон[[+phone]]`]]
Заполнено поле или нет, все равно не появляется. Но если просто выводить [[+phone]], то телефон отображается
[[!+modx.user.id:userinfo=`email`]]
[[!+modx.user.id:userinfo=`fullname`]]
и пр.
Error 401: Unauthorized503 ErrorUnauthorizedYou are not authorized to view the requested content.
Есть ли какие решения данной проблемы для мультиязычных сайтов?
unauthorized_page и различным значением страниц редиректа, при отсутствующей авторизации.
Изменил все в разделе «управление словарями», но некоторые выражения по типу "Неправильное имя пользователя или пароль. Пожалуйста, проверьте введённые данные и попытайтесь снова." все еще выводятся на русском.
В словаре core->login->ru, если у кого есть другое (правильное) решение, то буду рад)
Делаю все как у все в статье, но пишет «Недостаточно прав». Посмотрел как сделано в документации у Tickets, но все равно не работает. С чем это может быть связано?
P.S.
Поторопился
&loginResourceId = `` помог
А можно после регистрации без активации по email переходить сразу на страницу личного кабинета как авторизованный пользователь? В данный момент сниппет регистрации такой
а при редиректе после отправки формы перекидывает на форму авторизации(
github.com/modxcms/revolution/blob/2.x/core/model/modx/processors/security/login.class.php#L295
Делаю интеграцию с внешним сервисом, когда пользователю, который при покупке указал имя и email, присылается пароль для доступа к кабинету и сразу же через API создается
пользователь в системе. При авторизации в качестве логина используется email ( &loginViaEmail=`true` )
Проблема в том, что с одним email человек может совершить несколько покупок, и соответственно затем не сможет войти ни в какой аккаунт (Built in protection: If an email address exists more than once, the corresponding users can't login via email address! — из доков к Login). Что-то никак не могу придумать выход из этой ситуации.
Скажите а как выводить ссылку на регистрацию для гостей, и как заменять эту ссылку на личный кабинет для зарегистрированных пользователей?