Добрый день.

Есть Портал самообслуживания, доступный по адресу http://[server]/SSPLogin.aspx. В нем есть ссылка "Зарегистрироваться" для регистрации нового пользователя, с адресом http://[server]//0/Nui/UserManagement.aspx?action=register. По идее, на этой странице я должен увидеть кучу разных полей, необходимых для регистрации нового пользователя. Вместо этого - получаю пустую страницу. При просмотре "исходника" в браузере:




<br /> <br />

   







       

   

   
   

   


Что и где нужно настроить, чтобы таки отобразились необходимые поля? Или что я делаю не так?

Нравится

27 комментариев

Добрый день, Евгений!
Да, данный функционал присутствует и он неоднократно был протестирован.
Для корректной настройки его, необходимо выполнить все шаги в прикрепленной инструкции(во вложении).
Настроить страницу - недостаточно, необходимо еще редактировать config.

Сделал вот такие шаги:

1. В <configuration><appSettings> проверить наличие или добавить, если отсутствует:

<!-- LicPackageName = Ваша лицензия и в зависимости от продукта она разная  -->
<add key="SspUserRegistrationLicPackage" value ="{LicPackageName}" />
<!-- User1 и Password1 = имя и пароль пользователя, от чьего имени будет выполняться переход на страницу регистрации на портале. Этот пользователь должен быть максимально ограничен в правах и ему будет автоматически закрыт доступ на другие страницы системы.  -->
<add key="UserManagementSauName" value ="{User1}" />
<add key="UserManagementSauPassword" value ="{Password1}" />

2. В <configuration> в разделе пакета/приложения найти <auth> и в параметр "providerNames" добавить значение (Если уже что-то есть, то через запятую) "SSPUserPassword". Получиться, например:

<auth providerNames="InternalUserPassword,SSPUserPassword" autoLoginProviderNames="" defLanguage="ru-RU"defWorkspaceName="Default" useIPRestriction="false" loginTimeout="30000">

3. В <configuration><location><authentication mode="Forms"> заменить <forms loginUrl="~/NuiLogin.aspx" ... /> на:

<forms loginUrl="~/SSPLogin.aspx" protection="All" timeout="60" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="ViewPage.aspx?Id=4e342d5e-bd89-4b79-98e2-22e433122403" cookieless="UseDeviceProfile" enableCrossAppRedirects="true" />

4. В <configuration><system.webServer><defaultDocument><files> заменить <add value="NuiLogin.aspx" /> на <add value="SSPLogin.aspx" />

Все заработало. А теперь задачка усложняется:
1. может быть несколько вариантов регистрации, скажем так даже различные группы Пользователей. Можно ли такое сделать?
2. в карточке регистрации мне нужно изменить набор полей. Например, убрать Имя/Фамилия и добавить номер телефона. Это в конфигураторе можно сделать?

Евгений,
1. Нет. Страница предназначена для регистрации пользователей портала, а пользователю портала недоступны группы.
2.Если под конфигуратором имеет ввиду мастер разделов, то нет, нельзя, это aspx страница.

Александр,
немного поковыряв конфигуратор, нашел пакет SSP 7.7.0. В нем есть нечто похожее на работу страницы регистрации. И регистрация, там сделана как ВэбСервис C# UserManagementService, а JavaScript UserManagementModule и Registration выступают, как коннекторы.

Я могу попробовать реализовать альтернативный сервис, который заместит текущий?

Евгений, не уверен насчет заместить, но вызвать свой вы точно сможете в Registration вызов происходит в:
сallServiceMethod('Register', registerCallback, userManagementToken, this);
при этом сallServiceMethod определен здесь же как:
var callServiceMethod = function(name, callback, data, scope) {
Terrasoft.AjaxProvider.request({
url: Terrasoft.workspaceBaseUrl + '/rest/UserManagementService/' + name,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: 'POST',
jsonData: data,
callback: function(request, success, response) {
var responseObject = {};
if (success) {
responseObject = Terrasoft.decode(response.responseText);
}
callback.call(this, success, responseObject);
},
scope: scope
});
};
то есть вы можете вместо текущего сервиса, вызвать свой при желании

Александр, спасибо.
Буду копать.

Еще один вопрос, а если строку

url: Terrasoft.workspaceBaseUrl + '/rest/UserManagementService/' + name

я подменю на

url: Terrasoft.workspaceBaseUrl + '/rest/MyManagementService/' + name

и соответственно напишу свой сервис, то так тоже по идее должно сработать?

Да,
MyManagementService - сервис
name - метод сервиса

Александр, что-то не получается.
Я сделал замещающую схему Registration (SSP 7.7.0), в ней описал нужную логику, а вместо нее упорно подтягивается старая. Что я делаю не так?

То же самое и для UserManagementModule (SSP 7.7.0).

Евгений, я изначально сомневаюсь в реализуемости задуманного, но тем менее обратите внимание что Registration это модуль, а не схема страницы, замежать нужно как модуль, вызов модуля происходит здесь в UserManagementModule:
switch (Terrasoft.action) {
case 'register':
sandbox.loadModule('Registration', {
renderTo: renderTo,
id: sandbox.id + '-Registration',
keepAlive: true
});
break;
}
Попробуйте перезапустить пулл, почистить все кешивозможно, что-то где-то кешируется, возможно где-то в вебконфиге указывается напрямую айди схемы

Александр, да были проблемы с кэшем. Это все устранилось.
Сделал переопределение модуля UserManagementModule. Он сработал.
Но, при попытке загрузить созданный (не переопределенный!) модуль RegistrationV2 оно выдает такое:

core.js:674 WebSocket connection to 'ws://136.243.12.186:2011/0/Nui/UserManagement.aspx?action=register' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

Замещенный модуль UserManagementModule:

define('UserManagementModule', ['ext-base', 'terrasoft', 'sandbox', 'UserManagementModuleResources'],
    function(Ext, Terrasoft, sandbox, resources) {  
 
  var render = function(renderTo) {
    switch (Terrasoft.action) {
      case 'register':
        sandbox.loadModule('RegistrationV2', {
          renderTo: renderTo,
          id: sandbox.id + '-Registration',
          keepAlive: true
        });
      break;
    }
  };
 
  return {
    render: render,
    renderTo: Ext.getBody()
  };
});

Новый модуль RegistrationV2:

define('RegistrationV2', ['ext-base', 'terrasoft', 'sandbox', 'RegistrationResources'],
  function(Ext, Terrasoft, sandbox, resources) {
 // пока тут лежит код идентичный  Registration
});

Если вернуть обратно Registration - все работает.

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

Судя по всему виснет здесь:
sandbox.loadModule('RegistrationV2', {
renderTo: renderTo,
id: sandbox.id + '-Registration',
keepAlive: true
});
Думаю, что проблема я этой строке:
id: sandbox.id + '-Registration'

Возможно в этом тоже причина.
+ в переопределенном модуле UserManagementModule надо было подтянуть мой новый модуль RegistrationV2, в зависимостях.

Выдало такую ошибку (консоль браузера):

core.js:566 user: Portal/f5ecf16c-3768-461f-81c6-1023251e2b3b
 file: undefined
 line: undefined
 column: undefined
 message: Cannot read property 'localizableStrings' of undefined 
 date: Thu Mar 24 2016 11:47:46 GMT+0200 (Финляндия (зима))
 moduleId: UserManagementModule-RegistrationV2
 moduleName: RegistrationV2

Но localizableStrings есть в этом модуле.

UPD:
В модуле RegistrationV2 объект resourse является null. В нем судя заключается проблема

Все, подтянулось.
Заголовок модуля в RegistrationV2 должен выглядеть так:

define('RegistrationV2', ['ext-base', 'terrasoft', 'sandbox', 'RegistrationV2Resources'],
  function(Ext, Terrasoft, sandbox, resources) {
 // пока тут лежит код идентичный  Registration
});

то есть resources должен принимать значение не RegistrationResources, как вначале, а RegistrationV2Resources

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

Александр, спасибо. Учту на будущее.
Просто у меня этот модуль, он не замещенный, а новый.
У него нет родительского объекта.)

Добрый день!

Правлю конфиги в соответсвии с приложеным файлом.
Я правильно понию, что Loader это Web.config в корне сайта, а конфиг приложения это Terrasoft.WebApp\Web.config?
В итоге при запуске IIS получаю страницу авторизации, ввожу логин/пароль (и супервизор, и портальный пользователь) и получаю ошибку:
Ошибка HTTP 500.19 - Internal Server Error
Запрашиваемая страница не доступна из-за неверной конфигурации данных для этой страницы.

Добрый день, Ольга!
Проверил Ваши файлы, исправьте, пожалуйста:

В файле Web_1.config:

В строке SspUserRegistrationLicPackage уберите скобки в имени лицензии, строка должна иметь вид:

Файл Web_2.config такой же, как и Web_1.config, оба файла - это web.config Loader-а.
Файл приложения находится в папке Terrasoft.WebApp и он имеет совсем другое наполнение!
В нем необходимо прописать только:

"Михайленко Михаил" написал:

Добрый день, Ольга!

Проверил Ваши файлы, исправьте, пожалуйста:

В файле Web_1.config:

В строке SspUserRegistrationLicPackage уберите скобки в имени лицензии, строка должна иметь вид:

Файл Web_2.config такой же, как и Web_1.config, оба файла - это web.config Loader-а.

Файл приложения находится в папке Terrasoft.WebApp и он имеет совсем другое наполнение!

В нем необходимо прописать только:

К сожалению, некорректно отображается пример "В нем необходимо прописать только:"
На счет SspUserRegistrationLicPackage поняла.

Ольга, прошу прощение, не все отобразилось.
Я имел ввиду, что в файле Web.config приложения, которое находится в папке Terrasoft.WebApp необходимо прописать только:

""UserManagementSauName" value ="Логин" />
""UserManagementSauPassword" value ="Пароль" />

После внесенных изменний сайт запускается, открывается страница SSPLogin.aspx, при нажатии Зарегистрироваться открывается страница регистрации. Вроде все ок. Но, есть пользователь, ему назначена лицензия портала, при логине ввожу логин/пароль, но меня не пускает на портал, а перебрасывает на страницу NuiLogin.aspx, ошибок никаких не пишет.

Ольга, я исследовал Ваши файлы, сейчас не вижу причин указанного Вами поведения.
Я вижу из конфигов, что пользователь UserOOVR - это пользователь, который должен раздавать лицензию для новых зарегистрированных.
Проверьте, он является портальным пользователем и выдана ли ему лицензия портала.

Самое интересное, создаю нового пользователя, даю ему портальную лицензию, все хорошо работает, логин происходит на портал. а именно UserOOVR не пускает..

И при регистрации пользователя на портале выходит ошибка: "На указанный электронный адрес не удалось отправить письмо для продолжения регистрации. Проверьте корректность введенного email...." Хотя из веб-интерфейса я отправляю письма без проблем. Куда копать?

Ольга, проверьте корректность параметров, которые должны быть указаны в системных настройках.

В предоставленной мной ранее инструкции есть пункт:

"В разделе "Системные настройки" указать корректные значения для всех настроек группы "Отправка e-mail сообщений"
В качестве имени пользователя должен быть указан адрес электронной почты, с которого будет производится рассылка писем для подтверждения регистрации и восстановления пароля"

Необходимо настроить согласно параметров подключения SMTP Вашего сервера.

Все отлично, получилось! Спасибо огромное. Если будут вопросы относительно портала еще напишу в эту ветку.

"Михайленко Михаил" написал:

Ольга, проверьте корректность параметров, которые должны быть указаны в системных настройках.

В предоставленной мной ранее инструкции есть пункт:

"В разделе "Системные настройки" указать корректные значения для всех настроек группы "Отправка e-mail сообщений"

В качестве имени пользователя должен быть указан адрес электронной почты, с которого будет производится рассылка писем для подтверждения регистрации и восстановления пароля"

Необходимо настроить согласно параметров подключения SMTP Вашего сервера.

Добрый день! У нас аналогичная проблема, при регистрации пользователя на портале выходит ошибка: "На указанный электронный адрес не удалось отправить письмо для продолжения регистрации. Проверьте корректность введенного email". Настроили всё по вашей инструкции. В качестве Имени пользователя SMTP-сервера указали адрес электронной почты, с которого будет производится рассылка писем. Через интерфейс письма отправляются нормально. Можете по конкретнее написать какие настройки можно проверить?

Ольга, всегда пожалуйста!

Антон, добрый день!
Вам необходимо проверить корректность всех системных настроек, которые входят в группу "Отправка email сообщений", а именно:

"E-mail службы поддержки" - указать email с которого будет производится отправка.

"Имя или IP-адрес SMTP-сервера" - указать значение SmtpHost, например, smtp.gmail.com - это для почтового сервера gmail. Данные для Вашего почтового сервера Вы можете узнать в интернете или, в случае использования Exchange - Вам необходимо их запросить в администратора почтового сервера.

"Имя пользователя SMTP-сервера" - здесь указывается ящик, от имени которого будет производится автоматическое подключение к почтовому серверу.

"Пароль пользователя SMTP-сервера" - пароль от ящика, который Вы указали в системной настройке "Имя пользователя SMTP-сервера".

"Порт SMTP-сервера" - собственно порт SMTP сервера, необходимо указать порт, который будет корректно работать с протоколом SSL.

Данные системные настройки необходимы для того, чтоб система могла автоматически использовать Ваш почтовый сервер для отправки автоматических уведомлений. Ситуация, когда Вы можете отправить сообщение вручную, свидетельствует о том, что в целом интеграция с почтой у Вас настроена корректно, но для автоматических сообщений этого еще недостаточно.
Хорошего Вам дня!

Показать все комментарии