Più applicazioni che utilizzano Authlogic, autenticando gli utenti in un database?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Ho visto la domanda posta alcune volte sui gruppi di Google, ma nessuno sembra dare seguito a una risposta o una soluzione. È possibile utilizzare un database centrale per la creazione e l'autenticazione dell'utente da più applicazioni Rails usando Authlogic?

Non è un'opzione per me usare OpenID in questo momento, mi piacerebbe ma il mio client non lo supporta ancora .

È stato utile?

Soluzione

Sembra che non sia stata ancora pubblicata una soluzione alla domanda originale.

Ho avuto un problema simile. Avevo più applicazioni su rotaie e dovevo essere in grado di tracciare gli utenti tra le attività su tutte. Quindi, volevo avere un'unica applicazione per la gestione degli utenti e il monitoraggio e tutte le altre applicazioni si connettessero a questo database utenti per l'autenticazione.

Stavo già usando Authlogic per alcuni altri progetti, quindi speravo che sarebbe stato semplice come cambiare alcune impostazioni di configurazione.

Ecco la mia soluzione:

Ho creato l'applicazione di tracciamento dell'utente principale. Non c'era nulla di speciale nell'applicazione. Ha permesso agli utenti di registrarsi, accedere, disconnettersi, ecc. Una volta effettuato l'accesso, gli utenti potevano quindi accedere alle altre app.

Nel file ambienti.rb della mia applicazione utente e in tutte le applicazioni che devono autenticarsi con l'applicazione di base, è necessario impostare la chiave di sessione e il dominio come SAME.

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

Ognuna delle mie applicazioni è sotto il proprio sottodominio, come app1.basedomain.com app2.basedomain.com Non sono sicuro che funzionerebbe diversamente senza ulteriori modifiche.

In ciascuna applicazione, creare la sessione utente

class UserSession < Authlogic::Session::Base   
end

e modelli utente.

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

Ciò che differisce in questo modello utente è che ora ha il metodo di connessione stabilita. il " database_utente " si trova nel file database.yml e punta al database per l'applicazione di gestione utente centrale.

Non sono arrivato al punto di accedere e disconnettermi dalle mie sotto-applicazioni, ma se lo facessi dovresti creare anche UserSessionsController.

In ogni applicazione che utilizza l'autenticazione, ho incluso alcuni metodi di supporto in ApplicationController, ad esempio

   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

Quindi posso usare 'request_user' nei miei controller dove voglio l'autenticazione proprio come posso nella mia applicazione utente principale.

Spero che questo aiuti.

Chase M Grey

Altri suggerimenti

Da un punto di vista progettuale, hai pensato di creare un sistema dedicato alla gestione delle informazioni e dell'autenticazione dell'utente. Quindi fai connettere le tue altre applicazioni a quel sistema tramite un'API sicura, molto probabilmente interna. Puoi mantenere separati i tuoi database e proteggere il database degli utenti consentendo l'accesso solo tramite l'API.

La risposta breve è " Sì. " Sicuro. La condivisione di un modello utente tra applicazioni non è sostanzialmente diversa dalla condivisione di qualsiasi tipo di modello altro tra le applicazioni. Cavolo, potresti anche potenzialmente estrarre i tuoi dati utente tramite REST con ActiveResource se non ti dispiace che sia un po 'lento.

Ma se Authlogic e soluzioni simili non sono un vincolo aziendale bloccato, ci sono altri modi per gestire SSO (single sign-on) oltre a OpenID. Dai un'occhiata a RubyCAS , Castronaut (forse con Casablanca per un cliente), o per un approccio totalmente diverso , Hancock .

Penso che il modo migliore per implementare un sistema OpenID .
Consentirebbe ai tuoi utenti di autenticarsi non solo sulle tue applicazioni ma quasi ovunque con il loro login e password.

Personalmente non mi piace OpenID, la gente tende a pensare che sia un po 'più sicuro di quanto non sia.

Per quanto riguarda la tua domanda, non vedo alcun motivo per cui non puoi farlo, dovrai prestare particolare attenzione alla sicurezza (l'utente può accedere solo all'app / dominio a cui è autorizzato a ex).

L'unico problema che vedo è che non puoi condividere solo una tabella tra app, per impostazione predefinita, dovrai utilizzare lo stesso database per tutte le tue app , un no-no.

Ma c'è un modo per indicare un modello a un database diverso, consiglierei la gemma [link text] [1]. sebbene sia pensato per un uso completamente diverso, dovresti essere in grado di utilizzarlo per indirizzare ciascuna delle tue app su un database specifico e diverso per il modello del tuo utente.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top