Jabber авто-логин со случайным именем
Вопрос
Я создаю чат с использованием JSJaC и ejabberd . Это все работает, за исключением того, что все посетители сайта получают учетную запись «гость». Если два посетителя пытаются одновременно общаться в чате, ответы запутываются или первый пользователь выходит из системы.
Я могу произвольно установить имя гостя, но затем мне нужно проверить, зарегистрировано ли это имя или авторегистрацию, и надеюсь, что оно не было зарегистрировано ранее. Я пытался присвоить каждому логину случайное имя ресурса, но это все равно объединяло разговоры.
Короче говоря, я ищу самый простой способ, позволяющий нескольким анонимным входам в систему начать индивидуальные разговоры с использованием учетной записи livechat. Еще лучше (но не обязательно), если livechat может циклически перебирать другого пользователя, когда основная учетная запись livechat находится в чате.
Решение может быть на основе веб-клиента или сервера, мне все равно, так как я управляю обоими (а ejabberd поддерживает различные модули).
Кстати, когда я пытаюсь автоматически зарегистрировать зарегистрированную учетную запись, возвращается демо JSJaC simpleclient:
An error occured:
Code: 409
Type: cancel
Condition: conflict
Я еще не установил, могу ли я это игнорировать или переопределить с помощью пользовательской настройки клиента или сервера. Полагаю, я мог бы просто обнаружить эту ошибку и повторить попытку без автоматической регистрации, но мне хотелось бы услышать лучшие / более простые варианты.
Решение
Попробуйте включить режим анонимного входа на своем сервер ejabberd? Тогда вам не нужно регистрировать учетные записи клиентов, просто выберите любое имя пользователя и пароль, и ejabberd должен их принять ...
Другие советы
Я полагаю, вы можете использовать внешнюю аутентификацию в ejabberd Я нахожусь в той же ситуации: я хочу, чтобы анонимные пользователи могли входить на сервер, но некоторые специальные пользователи также могут входить для выполнения задач, не требующих решения ... Поэтому я решил написать скрипт php в качестве обработчика аутентификации для ejabberd. Затем он примет все логины с именем, начинающимся с anon_ * и аутентифицировать других пользователей по базе данных.
У нас была похожая проблема в проекте - мы хотели, чтобы пользователи могли войти в систему, не требуя создания учетной записи или столкновений - автоматическая регистрация не будет работать для нас, потому что имена могут конфликтовать. В итоге мы выбрали анонимный вход с аутентификацией SASL в ejabberd - он позволяет анонимный вход и динамическое создание учетной записи, и я считаю, что учетные записи не остаются в системе (они активны, пока открыто соединение), однако из того, что я помню, Сервер сгенерирует случайный идентификатор для пользователя.
Проблема GUID JID может быть решена с помощью псевдонимов р>
Если вы не можете настроить анонимный режим ejabberd, попробуйте создать GUID для каждого базового имени пользователя, и просто регистрация пользователя на лету. Вам понадобится периодический скрипт, который удаляет старые неиспользуемые учетные записи из базы данных.