Essa semana tive que fazer uma integração com a API de autenticação do Facebook e fiz uma pesquisazinha. Dei de cara com esse post que fazia uma comparação entre quatro ferramentas. Assim como o post, fiquei entre o django-allauth e o django-social-auth. Testei somente o segundo e ele coube como uma luva para o que eu necessitava – autenticar com o Facebook e manter a autenticação padrão do Django ativa.
Como não achei nada na internet que fosse resumido e focado para a autenticação com o Facebook utilizando essa app, resolvi fazer esse post para compartilhar a experiência. Então vou fazer um passo-a-passo aqui do que tive que fazer para completar a integração (que foi bem simples, diga-se de passagem).
Passo 1: READ THE DOCS!
Mesmo sendo algo simples e utilizando uma app para fazer a autenticação, você ainda tem a obrigação de ler a documentação do que trata a autenticação com o Facebook. Não adianta nada usar uma lib sem saber o que ela resolve por baixo dos panos. Aconselho a ler, pelo menos, a página que fala do fluxo da autenticação e da lista de permissões adicionais.
Passo 2: Configurar o seu projeto com o django-social-auth
Essa parte é muito simples. Tudo que você precisa fazer é instalar a app e configurá-la. Para instalar a app e as suas dependências, basta executar:
pip install django-social-auth
Depois disso, só precisamos configurar o settings.py e o urls.py da seguinte maneira:
Passo 3: Colocar o link no template
A configuração acima é tudo que você precisava para uma autenticação básica. Aconselho fortemente a ler o código da app para entender o que ela faz com os modelos por baixo dos panos. Agora é só colocar a url correta no template com a linha abaixo e correr para o abraço:
<a href=”{% url socialauth_begin ‘facebook’ %}”>Login com o Facebook</a>
Level Bônus: Recuperando dados extras do usuário
Como eu falei, o processo acima lida com uma autenticação básica. Mas, como fazer se precisarmos de mais dados do usuário como, por exemplo, sua cidade ou o seu aniversário? Se você leu a documentação do Facebook, vai ver que é só adicionar alguns valores na querystring da sua requisição de autenticação. (Aqui vale um parênteses: o Facebook não manda o email do usuário no pacote de dados básicos) O django-social-auth viabiliza isso através de uma variável no settings e com o uso da sua estrutura de pipeline. O seu pipeline é composto por funções que são executadas no final do processo de autenticação e o mesmo é extensível. Portanto, você pode escrever sua função para fazer algo específico – no nosso caso salvar o aniversário e a cidade natal do usuário – e colocá-la no pipeline de funções executáveis. Para isso precisaríamos apenas adicionar algo parecido com isso ao nosso projeto:
Conclusão
Achei a app bem bacana e fácil de usar e configurar. Achei ela bem pensada e versátil (existe autenticação com 1000 redes sociais e afins). O único ponto que não gostei muito foi a maneira com que ela lida com falhas. A maioria da exceções são capturadas e não são tratadas ou geram notificações para os admins. Apenas mostram na tela uma mensagem falando que algo de errado aconteceu.
Para quem quer utilizá-la, digo que vale muito a pena dar uma navegada pelo seu código para ficar mais familiarizado com a app e ver se ela realmente tem o potencial necessário para atender as suas necessidades.
Até a próxima!
Puts, muito bom, tava pensando em por algo do tipo num sistema que estou implementando mas tava cm um pouco de receio de ser muito complicado.
Agora posso ver que é até simples(ao menos sabendo o caminho das pedras né)
Obrigado.
Muito bom seu post, não sei se é pedir demais, mas poderia disponibilizar o exemplo para download?