2011-12-14 12 views
6

tengo que desarrollar aplicaciones de múltiples sitios con inicio de sesión único dominios en todo (algo así como la cuenta de Google con múltiples servicios de Google como Gmail, Docs, Google +):Aplicación de varios sitios con inicio de sesión único en todos los dominios de Rails?

multi applications, multi domains, single sign on

  • Para utilizar childen usuario sitios deben firmar en el sitio principal
  • Cada sitio tiene su propia lógica, excepto el inicio de sesión de usuario, los puntos y las facturas .
  • Desde la aplicación hija, debo poder iniciar sesión en la cuenta de usuario global , gastar puntos de usuario y generar factura para algún servicio.
  • Formulario de registro, listado de facturas y panel para administrar puntos son , disponible solo desde el sitio principal/aplicación.

¿Cuál es la mejor estrategia para implementar esto en Rails 3.1? La escalabilidad, el rendimiento y la seguridad son importantes.

  • ¿Rieles sencillos o múltiples?
  • ¿Bases de datos simples o múltiples?
  • ¿Servicios globales en la aplicación principal o como aplicaciones/motores por separado?
  • ¿Cómo implementar el inicio de sesión único? ID de sesión única en DB o algo así como facebook oauth?
  • ¿Cómo implementar puntos de gasto y generar facturas como resultado de la solicitud desde el sitio secundario?
+0

qué enfoque tomó? – Karolis

+0

De @ david-sulc answer, con '@ token.get ('/ customaction')' para recibir datos personalizados. – rogal111

Respuesta

5

Debería poder implementar esto utilizando OmniAuth con múltiples (e independientes) aplicaciones Rails. Estos serán de interés:

Blog post sobre el tema: http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

+0

Gracias, ahora cómo implementar las solicitudes a parentsite p. ej. método de "gastar puntos de usuario". Oauth2 tiene '@ token.get ('/ customaction')', ¿es apropiado? – rogal111

-1

Digamos que crea el Modelo User en la aplicación principal y lo migra. Entonces, lo que debe hacer es acceder a este Datbase desde las otras aplicaciones. Eso no es un problema . En primer lugar es necesario añadir la definición de conexión de base de datos de la aplicación Principal a la config/database.yml de la solicitud niño como éste:

parent_connection: 
    adapter: your_adapter_here 
    host: your_host_here 
    username: username 
    password: password 
    database: main_application_production 

A continuación, crear un modelo de llamada del usuario, pero no con el scaffolder o algo. Me gusta esto. Basta con crear el archivo manualmente como esto:

class User < ActiveRecord::Base 
    establish_connection :parent_connection # This uses the specified connection 
end 

En el caso por defecto la conexión seleccionada es la que coincide con el nombre del medio ambiente. Solo necesita especificar variaciones. Entonces ahora puede acceder a la clase User como en la aplicación principal.

+0

Ok, sé cómo establecer la conexión del modelo a la base de datos seleccionada, pero esto es una pequeña parte del problema. Necesito una solución/patrón/estrategia/modelo de diseño suave para resolver problemas de escalabilidad, rendimiento y seguridad. – rogal111

+0

-1, mal diseño para unir dos aplicaciones en la línea de una base de datos. use los servicios web –

Cuestiones relacionadas