Вопрос: Как мне управлять анонимными пользователями, чтобы обновить несколько вкладок в одном браузере, когда концентратор отправляет ответ?
Сценарий выглядит следующим образом:
Я хотел бы интегрировать SignalR в проект, чтобы анонимные пользователи могли общаться в чате с операторами. Очевидно, что пользователь, прошедший аутентификацию с помощью iIdentity, отображается с помощью команды Client.User(username). Но в настоящее время говорят, что анонимный пользователь просматривает site.com/tools и site.com/notTools. Я не могу отправлять сообщения на все вкладки только с идентификатором соединения. Ответ.
Я попытался использовать патч IWC, но этот инструмент не учитывает сохранение информации о чатах в базе данных, и я думаю, что передача переменных через ajax не является безопасным способом чтения/записи в базу данных.
Я также рассмотрел следующее: Управление соединениями SignalR для анонимного пользователя
Однако создание такой базы, как эта, и использование сеансов, кажется менее надежным, чем Owin.
У меня возникла идея использовать client.user(), создавая ложную учетную запись каждый раз, когда пользователь подключается и удаляет ее при отключении. Но я предпочел бы не заполнять мой контекст db-контекста с помощью мусорных учетных записей, это кажется ненужным.
Можно ли использовать UserHandler.ConnectedIds.Add(Context.ConnectionId);
, чтобы также отобразить поддельное имя пользователя? Я в недоумении.
Имеет ли смысл использовать iUserId провайдера?
public interface IUserIdProvider
{
string GetUserId(IRequest request);
}
Затем создайте базу данных, в которой хранятся IP-адреса для идентификаторов соединений и одиночных имен пользователей?
базы данных:
Пользователи: с идентификаторами FK для подключения
|userid|username|IP |connectionIDs|
| 1 | user1 |127.0.0.1| 1 |
| 2 | user2 |127.0.0.2| 2 |
connectionIDs:
|connectionID|SignalRID|connectionIDs|
| 1 | xx.x.x.x| 1 |
| 2 | xx.xxx.x| 2 |
| 3 | xx.xxxxx| 2 |
| 4 | xxxxx.xx| 2 |
Затем возможно написать логику вокруг соединения?
public override Task OnConnected()
{
if(Context.Identity.UserName != null){
//add a connection based on the currently logged in user.
}
else{
///save new user to database?
}
}
но остается вопрос, как я могу обрабатывать несколько вкладок с этим при отправке команды на веб-сайт?
Обновление Чтобы быть ясным, я намерен создать интерактивный чат/инструмент поддержки, который позволяет в анонимном доступе браузера в любое время.
Клиент хочет что-то похожее на http://www.livechatinc.com
Я уже создал плагин javascript, который отправляет и получает от концентратора, независимо от того, в каком домене он включен. (у моего клиента многосайты) недостающая часть головоломки является самой простой, позволяющей анонимным пользователям разрешать многозадачные разговоры.