Autenticando o seu usuário Django pelo Facebook

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!

Share on Facebook
Post to Google Buzz

2 Thoughts on “Autenticando o seu usuário Django pelo Facebook

  1. 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.

  2. Muito bom seu post, não sei se é pedir demais, mas poderia disponibilizar o exemplo para download?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Post Navigation