Vários aplicativos usando Authlogic, autenticação de usuários em um banco de dados?

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Eu vi a pergunta algumas vezes sobre os grupos do Google, mas ninguém parece seguir-se com uma resposta ou solução .. É possível usar um banco de dados central para a criação do usuário e autenticação de aplicações múltiplas Rails usando Authlogic?

Não é uma opção para mim usar OpenID agora, eu adoraria, mas meu cliente não apoiá-lo ainda .

Foi útil?

Solução

Parece que ainda não tem sido uma solução postada à pergunta inicial.

Eu tive um problema semelhante. Eu tive várias aplicações Rails e eu precisava ser capaz de rastrear usuários entre a atividade em todos eles. Então, eu queria ter um único aplicativo para gerenciamento de usuários e monitoramento e todos os outros aplicativos que conectar a esse banco de dados de usuário para autenticar.

Eu já estava usando Authlogic para alguns outros projetos, então eu estava esperando que seria tão simples como mudar algumas definições de configuração.

Aqui está a minha solução:

Eu criei o principal aplicativo de rastreamento de usuário. Não há nada especial sobre o aplicativo. É permitido aos usuários registrar, faça o login, logout, etc. Depois que os usuários foram registados no que podiam navegue para os outros aplicativos.

No arquivo environments.rb da minha aplicação do usuário e cada aplicativo a necessidade de autenticar com o aplicativo base, você precisa configurar a chave de sessão e de domínio a ser o mesmo.

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

Cada um dos meus aplicativos estão sob seu próprio subdomínio, como app1.basedomain.com app2.basedomain.com Eu não tenho certeza se isso iria funcionar de outra forma, sem mais algumas alterações.

Em cada aplicação, crie o UserSession

class UserSession < Authlogic::Session::Base   
end
modelos

e o usuário.

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

O que é diferente neste modelo de usuário é que ele tem agora o método de estabelecer a conexão. o "users_database" está no arquivo database.yml e aponta para o banco de dados para o aplicativo de gerenciamento de usuário central.

Eu não ir tão longe como tendo login e logout durante toda a minha sub-aplicações, mas se você fez, você teria que criar o UserSessionsController também.

Em cada aplicação que a autenticação usos, eu incluí alguns métodos auxiliares no ApplicationController, por exemplo,

   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

Então eu posso usar 'require_user' em meus controladores onde eu quero autenticação assim como eu posso no meu aplicativo principal do usuário.

Espero que isso ajude.

Perseguição M Grey

Outras dicas

Do ponto de vista do design, você já pensou sobre a criação de um sistema dedicado para lidar com as informações do usuário e autenticação. Então, seus outros aplicativos se conectam a esse sistema através de uma API segura, mais provável interno. Você pode manter seus bancos de dados separados, e manter o banco de dados de usuários seguros, permitindo apenas o acesso por meio da API.

A resposta curta é "sim". Certo. A partilha de um modelo de usuário entre aplicativos não é fundamentalmente diferente de compartilhar qualquer outro tipo do modelo entre as aplicações. Heck, você poderia até mesmo puxar os dados do usuário via descansar com ActiveResource se você não se importa de ser um pouco lento.

Mas se Authlogic e soluções como não são um locked-in restrição de negócios, existem outras maneiras de lidar com SSO (single sign-on), além de apenas OpenID. Dê uma olhada na RubyCAS , Castronaut (talvez com Casablanca para um cliente), ou para uma abordagem totalmente diferente , Hancock .

Eu acho que a melhor maneira yould ser implementar um OpenID sistema.
Seria permite que seus usuários para autenticar não só em seus aplicativos, mas em quase qualquer lugar com seu login e senha.

Pessoalmente eu não gosto de OpenID, as pessoas tendem a pensar que é um pouco mais seguro do que é.

Quanto à sua pergunta, eu não vejo nenhuma razão para que você não pode fazer isso, você vai ter de colocar algum cuidado extra na segurança (usuário só pode fazer login no app / domínio que ele é permitido para ex).

O único problema que eu vejo é que você não pode compartilhar apenas uma tabela entre aplicativos, por padrão, você terá que usar o mesma base de dados para todos os seus aplicativos , um não-não.

Mas, há uma maneira você pode apontar um modelo para um banco de dados diferente, eu recomendaria o [link de texto] [1] jóia. embora seja destinado a um uso completamente diferente, você deve ser capaz de usá-lo para apontar cada um dos seus aplicativos a um específico, banco de dados diferente para o modelo do usuário.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top