2010-09-27 12 views
15

Tenemos un sitio de redes sociales donde las personas tienen contactos y queremos que se integre con XMPP. Actualmente usamos el servidor ejabberd XMPP.Cómo integrar completamente XMPP en un sitio web con usuarios registrados

Aquí están mis preguntas:

  1. Cómo crear correctamente cuenta? En este momento, lo que estoy pensando es en el registro de usuarios en nuestra aplicación web, llamaríamos un script que ejecutaría un comando ejabberd para crear un usuario.

  2. Autenticación de usuario. Cuando el usuario inicie sesión en nuestro sitio web, el usuario iniciará sesión automáticamente en el sistema de chat. ¿Cómo se hace esto en el lado del cliente con strophe.js? Según tengo entendido, debe proporcionar el JID y la contraseña para la autenticación, así que estoy pensando que al iniciar sesión, habrá una llamada ajax para obtener la contraseña del usuario, luego use el texto de respuesta en la llamada de inicio de sesión de strophe.js. ¿Esto es seguro? ¿Hay otras formas de hacer esto?

  3. Registro de presencia. Nuestra aplicación web tiene un sistema de contactos, pero XMPP tiene su propia forma de agregar contactos a través de la suscripción de presencia, ¿verdad? Ejemplo: cuando user1 intenta agregar user2, se le solicitará autorización a user2 antes de que user1 pueda ser un contacto de user2. Pero como ya tenemos un sistema de contactos en nuestra aplicación web, queremos omitir esta autorización de XMPP o suprimirla y solo autorizar con un script/comando cuando user2 confirma user1 como un contacto en nuestro sitio web. Todavía no me queda claro, pero un colega dijo que esto es posible en el modulo mod_admin_extra de ejabberd (un comando que creará una suscripción sin tener que autorizar al cliente). ¿Es posible o tengo que manipular manualmente la base de datos ejabberd con una secuencia de comandos (siempre que transfiera desde el db predeterminado de Mnesia a otro db, digamos MySQL).

Gracias de antemano.

Respuesta

8

Muy bien, esto es lo que hicimos:

1) En lugar de autenticación personalizado de autenticación/externa, que crear cuentas de usuario en XMPP después de un usuario se registra.

2) La respuesta a esta es el archivo adjunto de la sesión, como señaló Julien. Creamos un script PHP que crearía la sesión y devolvería el ID de sesión y el RID. Llamado a través de AJAX al iniciar sesión del usuario (después de que el documento esté listo).

3) Como dije en un comentario sobre la publicación de Julien, usamos mod_admin_extra.Nos acoplamos con mod_rest (w/c le permite enviar stanzas/ejecutar comandos de estilo REST) ​​para crear las listas. Hay un comando * add_rosteritem * en mod_admin_extra que se llama cada vez que los usuarios crean contactos en nuestro sitio web.

+0

Al usar 'mod_admin_extra', ¿se notifica a los usuarios cuando se crea un nuevo elemento de lista? –

10

Tenemos una aplicación web similar donde XMPP es parte de la aplicación.

La elección que realizamos es no replicar los datos del usuario en el almacenamiento de la aplicación web y el servidor XMPP. Puede construir su propio authentication mechanism usando la tienda de datos de la aplicación web con ejabberd, es bastante fácil. De esta forma, solo tiene 1 lugar único donde se almacenan los datos del usuario y no tiene que crear usuarios de ejabberd.

Al hacer esto, también puede iniciar sesión en la aplicación web sin conocer su contraseña o incluso almacenarla en claro :). La manera más fácil es hacer la autenticación de la sesión (a través de Bosh) en el servidor y pasar la identificación de la sesión a la respuesta HTML, como described here, por @metajack.

La tercera parte puede ser la más complicada, pero de hecho estoy seguro de que puedes omitir esto y no usar las "listas" incorporadas ... sin embargo, puede implicar crear tu propio componente (interno o externo) .

+0

Hola Julien, ya he leído usando la autenticación externa, pero creo que no he leído más. Estaba confundido al principio con su respuesta ya que en este ejemplo de script PHP (http://www.ejabberd.im/files/efiles/check_mysql.php.txt) no hay nada que atrape la creación del usuario mencionado aquí (https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/dev.html#htoc8). En el ítem 3 sigo buscando en el módulo admin_extra, lo actualizaré una vez que encuentre algo. – putolaruan

+0

Vaya. Antes de ir a dormir anoche finalmente entendí por qué no necesito crear usuarios jabber con autenticación externa. D'oh. Ahora, el único bloqueador restante es la función de listas. – putolaruan

+0

¡Bien! Puede que tenga que crear su propio componente. No es tan difícil, así que le daría una oportunidad. ¡Yon puede crear uno "interno" o uno externo (recomendado) en cualquier idioma! –

Cuestiones relacionadas