¿Múltiples aplicaciones que usan Authlogic, autenticando usuarios en una base de datos?

StackOverflow https://stackoverflow.com/questions/1631586

  •  06-07-2019
  •  | 
  •  

Pregunta

He visto la pregunta formulada varias veces en los grupos de Google, pero nadie parece dar seguimiento con una respuesta o solución. ¿Es posible usar una base de datos central para la creación y autenticación de usuarios desde múltiples aplicaciones de Rails usando Authlogic?

No es una opción para mí usar OpenID en este momento, me encantaría pero mi cliente todavía no lo admite .

¿Fue útil?

Solución

Parece que todavía no se ha publicado una solución a la pregunta original.

Tuve un problema similar. Tenía múltiples aplicaciones de rieles y necesitaba poder rastrear a los usuarios entre actividades en todas ellas. Entonces, quería tener una sola aplicación para administrar usuarios y hacer un seguimiento y todas las demás aplicaciones se conectarían a esta base de datos de usuarios para autenticarse.

Ya estaba usando Authlogic para otros proyectos, así que esperaba que fuera tan simple como cambiar algunas configuraciones.

Aquí está mi solución:

Creé la aplicación principal de seguimiento de usuarios. No había nada especial sobre la aplicación. Permitía a los usuarios registrarse, iniciar sesión, cerrar sesión, etc. Una vez que los usuarios iniciaran sesión, podían navegar a las otras aplicaciones.

En el archivo assets.rb de mi aplicación de usuario y en todas las aplicaciones que necesiten autenticarse con la aplicación base, debe configurar la clave de sesión y el dominio para que sean IGUALES.

config.action_controller.session = {
  :session_key => '_my_app_session',
  :secret      => '_long_secret_session_key_here',
  :domain => ".basedomain.com" 
}

Cada una de mis aplicaciones está bajo su propio subdominio, como app1.basedomain.com app2.basedomain.com No estoy seguro de si esto funcionaría de otra manera sin algunos cambios más.

En cada aplicación, cree la sesión de usuario

class UserSession < Authlogic::Session::Base   
end

y Modelos de usuario.

class User < ActiveRecord::Base
   establish_connection "users_database"
   acts_as_authentic 
end

Lo que es diferente en este modelo de usuario es que ahora tiene el método de establecer conexión. la " users_database " está en el archivo database.yml y apunta a la base de datos para la aplicación central de administración de usuarios.

No fui tan lejos como para iniciar y cerrar sesión en todas mis aplicaciones secundarias, pero si lo hiciera, también tendría que crear el UserSessionsController.

En cada aplicación que usa autenticación, incluí algunos métodos auxiliares en el ApplicationController, por ejemplo,

   def current_user_session
      return @current_user_session if defined?(@current_user_session)
      @current_user_session = UserSession.find
   end

   def current_user
      return @current_user if defined?(@current_user)
      @current_user = current_user_session && current_user_session.record
   end

   def require_user
     unless current_user
       store_location
       redirect_to 'http://main_user_login_page'
       return false
     end
   end

Entonces puedo usar 'require_user' en mis controladores donde quiero autenticación como puedo en mi aplicación de usuario principal.

Espero que esto ayude.

Chase M Grey

Otros consejos

Desde el punto de vista del diseño, ¿ha pensado en crear un sistema dedicado a manejar la información y autenticación del usuario? Luego, haga que sus otras aplicaciones se conecten a ese sistema a través de una API segura, probablemente interna. Puede mantener sus bases de datos separadas y mantener la base de datos de usuarios segura solo permitiendo el acceso a través de la API.

La respuesta corta es "Sí". Por supuesto. Compartir un modelo de usuario entre aplicaciones no es fundamentalmente diferente de compartir cualquier tipo de modelo otro entre aplicaciones. Diablos, incluso podrías extraer tus datos de usuario a través de REST con ActiveResource si no te importa que sea un poco lento.

Pero si Authlogic y soluciones como esta no son una restricción comercial bloqueada, hay otras formas de manejar SSO (inicio de sesión único) además de OpenID. Eche un vistazo a RubyCAS , Castronaut (tal vez con Casablanca para un cliente), o para un enfoque totalmente diferente , Hancock .

Creo que la mejor forma de implementar un sistema OpenID .
Permitiría a sus usuarios autenticarse no solo en sus aplicaciones, sino en casi cualquier lugar con su nombre de usuario y contraseña.

Personalmente no me gusta OpenID, la gente tiende a pensar que es un poco más seguro de lo que es.

En cuanto a su pregunta, no veo ninguna razón por la que no pueda hacer eso, tendrá que poner especial cuidado en la seguridad (el usuario solo puede iniciar sesión en la aplicación / dominio que tiene permitido ex).

El único problema que veo es que no puede compartir solo una tabla entre aplicaciones, de forma predeterminada, tendrá que usar la misma base de datos para todas sus aplicaciones , un no-no.

Pero, hay una manera de apuntar un modelo a una base de datos diferente, recomendaría la gema [texto del enlace] [1]. aunque está destinado a un uso completamente diferente, debe poder usarlo para apuntar cada una de sus aplicaciones a una base de datos específica y diferente para el modelo de su usuario.

[1]: http://github.com/fiveruns/data_fabric data_fabric

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top