O que deveria estrutura de tabela olhar como quando a adição de login auth aberto ao modelo User

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

Pergunta

Eu tenho um aplicativo Rails com um modelo de usuário. Quero permitir que os usuários façam login com um punhado de serviços. Existem 2 maneiras que eu posso pensar para armazenar esta no banco de dados, mas não tenho certeza qual é o melhor. Devo observar que eu gostaria que os usuários possam se conectar com mais de um serviço e vincular as contas.

Método 1: Para cada serviço, adicionar campos simbólicos / secretas para a tabela de usuário. Esta parece ser uma problemática pouco porque o que se eu quiser loja, por exemplo, twitter sinal, segredo twitter, screenname twitter, e perfil do twitter img? Eu podia ver a tabela que o usuário tenha várias colunas não utilizados. Pode haver informações adicionais que deseja armazenar com cada serviço. Seria algo parecido com isto:

id
twitter_token
twitter_screenname
twitter_secret
twitter_pic
facebook_token
facebook_secret
facebook_pic
facebook_name
google_token
google_secret
google_name
etc.

Método 2:
Ou cada usuário pode ter muitos logins sociais e cada login sociais pertencem a um usuário. Então eu teria uma tabela que parecia algo como

user_id
token
secret
social_type  # foreign key to a social_site look up table
social_pic

eo tipo social tabela seria algo parecido com:

id
social_site_name
oauth_url

O único aspecto negativo desta abordagem é que eu tenho a generalizar o que irá armazenar cerca de todos os serviços. Como vocês fazem isso? Talvez STI está em ordem aqui ... onde haveria uma classe para cada tipo de logon que herda de uma classe de login base.

Obrigado!

Foi útil?

Solução

Gostaria de sugerir algo como isto:

  • Cada user pode ter muitos logins , cada login pertence a um user somente.
  • Logins são de uma específica tipo , um login é um tipo somente.
  • mesa SocialLogin tem campos comuns a todos os login-tipos , Google, FaceBook e Twitter tabelas têm campos específicos para cada um.

login_model_01

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