Usando o Facebook para autenticar, como vincular ao registro do usuário no meu aplicativo? O email?

5

Estou usando o Facebook para autenticar usuários. Também temos login e login de usuário / senha convencionais. De qualquer forma, quando um usuário escolhe fazer login no Facebook, usamos o seguinte procedimento:

  1. Redirecionar para o Facebook, o usuário é autenticado, retornado do Facebook para o aplicativo - e-mail, nome, ID do Facebook etc. é fornecido pelo FB .. mas é claro, sem senha
  2. Nós procuramos em nosso sistema por qualquer usuário existente pelo endereço de e-mail. Se um usuário é encontrado, então esse é o usuário atualmente logado; caso contrário, crie um novo usuário com as informações do usuário retornadas do FB.

O e-mail faz sentido, já que não queremos endereços de e-mail duplicados (o banco de dados também não permite isso devido a um índice exclusivo), portanto, se um usuário já tiver se inscrito nesse endereço de e-mail, não tentará crie um novo usuário para eles. Em vez disso, ele puxará o usuário registrado anteriormente.

Esta é a abordagem sonora? Explorando todas as possibilidades, fiquei me perguntando o que acontece no caso do usuário tentar se cadastrar pelo nosso formulário de cadastro convencional, mas como eles já criaram uma conta com esse e-mail do seu login inicial no Facebook, não permitimos o e-mail duplicado. Então, tendo tomado a decisão de usar seu Facebook para fazer login, eles estão presos a esse método. Esta é uma abordagem comum / ok?

Além disso, sem intenção, se eles usarem primeiro o formulário de registro convencional e configurarem sua conta dessa forma, teremos sua senha, para que eles possam fazer o login usando nosso formulário ou fazer login no FB e a conta do usuário seja puxada por e-mail. No entanto, se eles optarem por fazer login com o FB pela primeira vez, e sua conta for criada dessa maneira (não obteremos o pw), eles devem sempre usar apenas o FB. Eu não tenho absolutamente nenhuma idéia se isso pode ser problemático ou não, eu meio que quero ir com a opção de - o que significa que você escolheu se registrar / registrar na primeira vez - então é isso que você fica:)

Sou um pouco novo em ter usuários que se inscrevem com vários logins, portanto, um pouco cheio de "o que fazer" etc. Gostaria de receber qualquer recomendação sobre isso e abordagens comuns. Obrigado

Como alternativa, perdemos o índice no campo de e-mail, adicionamos um campo em algum lugar para armazenar o ID do Facebook e, no nível do aplicativo, decidimos se permitiremos um endereço de e-mail duplicado e mais distinção entre usuários de diferentes métodos de login. para ter uma conta de usuário convencionalmente registrada, e / ou uma conta separada de login do facebook auth / created, ambos com o mesmo endereço de e-mail - mas diferentes métodos de login - menos se o usuário excluir sua conta do Facebook, eles podem criar uma conta com e-mail através do nosso formulário de registro)

    
por Martyn 10.02.2015 / 03:40
fonte

2 respostas

2

Eu separo Usuários / Perfis da Autenticação nos meus aplicativos. Essa pode ser uma abordagem que você pode usar. Especialmente se no futuro você achar que poderá adicionar twitter ou outros provedores de autenticação ao seu sistema.

Basicamente eu crio uma tabela chamada Credentials que armazena o UserID exclusivo no meu sistema e o ID Exclusivo que o provedor fornece. E-mail não é bom porque o usuário pode alterar seu e-mail com o provedor. O Facebook fornece um ID exclusivo para cada usuário em seu token.

Quando um usuário autentica, procuro o ID do provedor correspondente na tabela de credenciais. (Não esqueça de registrar qual provedor porque senão você pode encontrar uma correspondência para um login no twitter quando o usuário logou com o facebook). Finalmente, eu pego o usuário correspondente no meu sistema que tem o mesmo UserId que o registro de credencial.

Não há muitos passos na realidade que eu estava soletrando. Na verdade eu só preciso de uma consulta

select U.* from Users u
inner join Credentials on
u.userId=Credentials.userId
where Credentials.ProviderId =?
and Credentials.Provider=?

O nome de usuário e a senha armazenados no sistema, obviamente, seriam diferentes. Mas você já sabe como lidar com isso.

Em relação a exigir um login separado, mesmo quando o usuário acessa o facebook. Por favor, não faça isso ... isso é o mais irritante para mim como usuário quando me é dada a opção de fazer o login através do facebook e o sistema ainda requer que eu crie uma senha. Eu deixei sites no meio do registro por esse mesmo motivo.

    
por 11.02.2015 / 21:08
fonte
1

Alguns sites (por exemplo: Asana ) empregam a mesma tática que você faz: Se você se registrar usando um terceiro e depois tentar se registrar novamente próprio login, você será educadamente lembrado de que você já está registrado e redirecionado para o login de terceiros. Se você fizer o contrário, ainda poderá fazer login usando sua própria senha.

Outros sites (por exemplo, Wunderlist ) farão com que você crie uma senha mesmo se você se registrar usando uma terceira pessoa.

Portanto, ambas as abordagens existem por aí. Qual você usa é com você.

A primeira abordagem torna o registro mais simples. A experiência de login pode ser diferente para usuários diferentes, mas é igualmente simples para todos eles.

A segunda abordagem oferece aos usuários uma experiência uniforme no login. Também lhes dá uma opção de login, caso fiquem paranóicos com o Facebook.

    
por 11.02.2015 / 17:23
fonte