Diseñar – iniciar sesión desde dos modelos

Tengo dos modelos de usuario, el primero es de la base de datos remota como legado y para fines internos de la empresa. (Inicios de sesión de empleados). El segundo es nuestro proyecto para registro público e inicio de sesión, pero quiero un formulario de inicio de sesión. He buscado mucho tiempo, pero algunas soluciones son confusas para mí.

Aparece el primer legado (solo para lectura y autenticación):

class CrmUser  [:login] alias_attribute :encrypted_password, :crypted_password alias_attribute :password_salt, :salt # Setup accessible (or protected) attributes for your model attr_accessible :login, :password, :password_confirmation, :remember_me, :role_id, :first_name, :last_name 

Y segundo, para público y registro:

 class User  [:login] alias_attribute :login, :email # Setup accessible (or protected) attributes for your model attr_accessible :login, :password, :password_confirmation, :remember_me, :role_id, :first_name, :last_name 

Ahora no sé cómo hacer que el controlador de usuario intente la autenticación desde el primer modelo, y cuando el usuario no existe, vaya al segundo modelo y vuelva a intentarlo.

Utilizando:

  • Rieles 3.1
  • Idea 1.4.3

EDITAR:

En wiki of Devise hay algo sobre el modelo múltiple, pero estoy un poco confundido, no hay ejemplos más complejos.

Gracias.

Saludos, Rado

Debería utilizar el método de devise/models/authenticatable.rb de devise/models/authenticatable.rb find_for_authentication desde devise/models/authenticatable.rb

 module Devise module Models module Authenticatable def find_for_authentication(conditions) #put your authentication logic here end end end end 

Acerca de la lógica de autenticación: usar dos modelos para la autenticación en su caso es realmente una mala idea. ¿Cómo quieres construir relaciones con modelos de dos usuarios? Es un montón de código innecesario.

La forma correcta de resolver su problema es hacer una sincronización entre sus tablas.

  • Intente autenticar al usuario con el modelo de usuario base.

  • Si las credenciales de usuario eran incorrectas, intente autenticarlo con el modelo CrmUser.

  • Si la autenticación con CrmUser fue correcta, agréguelo a la tabla de usuarios si aún no existe.

  • Devolver objeto de modelo de usuario.