Skip to content
Office
Office
Универсальный личный кабинет покупателя
  1. Компоненты
  2. Office
  3. Контроллеры
  4. Удаленная авторизация

Удаленная авторизация

Идея заключается в том, что на сайте-клиенте и сайте-сервере запускаются 2 сниппета, которые позволяют авторизовать клиента через сервер.

officeRemoteServer

Этот сниппет запускается на сервере, через который будут заходить пользователи. Адрес, на котором вызван этот сниппет, должен быть указан у клиента — пускай это будет site.com/remote/login, для примера.

При переходе клиента на сервер, тот проверяет статус авторизации. Если к нам пришел гость — он редиректится на страницу логина сервера (если она не указана, то на родитель документа site.com/remote/). Там вы можете использовать officeAuth, HybridAuth, Login — что угодно, лишь бы авторизовать юзера.

Сразу после авторизации юзер должен быть отправлен обратно на site.com/remote/login — и там уже сниппет получит информацию о нем, сохранит в кэш на 10 секунд, сгенерирует авторизационный токен и отправит юзера с ним по тому адресу, с которого он пришел.

НазваниеПо умолчаниюОписание
&hostsСписок доменов через запятую, которым разрешено обращаться к странице авторизации.
&keyОбязательный ключ шифрования данных для защиты передаваемой информации. Ключ должен быть одинаковым на сервере и клиенте.
&authId0Id страницы сайта, для авторизации пользователя. После успешной авторизации пользователь должен быть отправлен обратно на сниппет "officeRemoteServer".

У сниппета авторизации нужно указать

modx
&loginResourceId=`id страницы site.com/remote/login`

Выходит, что на сервере у нас две страницы:

site.com/remote/ (id = 1)

modx
[[!officeAuth?
  &loginResourceId=`2`
]]

site.com/remote/login (id = 2)

modx
[[!officeRemoteServer?
  &hosts=`site2.ru`
  &key=`h4O58eqwt987Jmqewj`
  &authId=`1`
]]

officeRemoteAuth

Этот сниппет показывает форму входа и выхода.

В форме входа должна быть авторизационная ссылка site.com/remote/login, при переходе по которой юзер начинает авторизацию. Если всё в порядке — он авторизуется на сервере и возвращается на клиент с токеном, по которому клиент может получить информацию о пользователе у сервера.

Эта информация шифруется указанным ключом &key, и после получения данных пользователь создается\обновляется и авторизуется уже на клиенте.

При выходе с сайта клиента по такому же алгоритму (только без обмена информацией о юзере) происходит выход и с сервера.

Большинство параметров совпадает с officeAuth (чанки, группы, контексты, запоминать и т.д.), но есть и уникальные:

НазваниеПо умолчаниюОписание
&tplLogintpl.Office.remote.loginЭтот чанк будет показан анонимному пользователю, то есть любому гостю.
&tplLogouttpl.Office.remote.logoutЭтот чанк будет показан авторизованному пользователю.
&groupsСписок групп для регистрации пользователя, через запятую. Можно указывать роль юзера в группе через двоеточие. Например, &groups=`Users:1` добавит юзера в группу "Users" с ролью "member".
&rememberme1Запомниает пользователя на долгое время. По умолчанию - включено.
&loginContextОсновной контекст для авторизации. По умолчанию - текущий.
&addContextsДополнительные контексты, через запятую. Например, &addContexts=`web,ru,en`
&loginResourceId0Идентификатор ресурса, на который отправлять юзера после авторизации. По умолчанию, это 0 - обновляет текущую страницу.
&logoutResourceId0Идентификатор ресурса, на который отправлять юзера после завершения сессии. По умолчанию, это 0 - обновляет текущую страницу.
&updateUser1Разрешение обновлять существующих пользователей данными с удалённого сервера.
&createUser1Разрешение создавать новых пользователей.
&remoteОбязательный адрес страницы на удалённом сервере с вызовом сниппета "officeAuthServer".
&keyОбязательный ключ шифрования данных для защиты передаваемой информации. Ключ должен быть одинаковым на сервере и клиенте.

На сайте клиента у нас сниппет вызывается примерно так:

modx
[[!officeRemoteAuth?
  &key=`h4O58eqwt987Jmqewj`
  &remote=`http://site.com/remote/login`
  &groups=`Users`
]]