Django et authomatic : comment s’enregistrer en un click
Les étapes à faire
Installer :
- Python 2.7 maximum car google ne fournit des sources Python que pour la 2.7
- Django (version en cours = 1.8)
- Et puis ce qui n’est pas précisé avec authomatic :
- Installer defusedxml
- Installer google app engine (faut le chercher sur le site de google)
- Installer Python openid
- Installer enfin authomatic
Personnellement j’ai crée un dossier que j’ai appelé third_party
.
Ce qui fait que mon arborescence est comme cela :
. ├── locale │ ├── en │ ├── fr │ └── sv ├── produits │ ├── migrations │ └── templatetags ├── pyweb ├── static │ ├── css │ ├── fonts │ ├── images │ ├── js │ └── produits ├── templates │ └── produits └── third_party ├── authomatic_0_1_0 ├── defusedxml-0.4.1 ├── google_appengine_1_9_25 └── python-openid_2_2_5
Enfin, les associations dans authomatic :
Dans Facebook il faudra aller dans le coin des développeurs, et créer une application jusqu’à arriver à un écran comme celui-ci :
Même chose pour gmail :
Et enfin la relation dans le code :
Pour terminer : Facebook ne renvoyait pas les emails, lorsqu’on s’authentifiait.
C’est un bogue connu depuis que Facebook a modifié son API très récemment.
La solution est ici : editez votre fichier \authomatic\providers\oauth2.py
.
Allez à la classe Facebook.
Copiez-collez ce code, qui ne change presque rien (je vous laisse chercher) sauf l’URL user_info_url
qui a été modifiée pour la v2.4 : et voilà, il ne vous reste plus qu’à suivre le tutoriel de authomatic avec Django, qui est assez bien fait, et tout devrait fonctionner !
class Facebook(OAuth2): """ Facebook |oauth2| provider. * Dashboard: https://developers.facebook.com/apps * Docs: http://developers.facebook.com/docs/howtos/login/server-side-login/ * API reference: http://developers.facebook.com/docs/reference/api/ * API explorer: http://developers.facebook.com/tools/explorer Supported :class:`.User` properties: * city * country * email * first_name * gender * id * last_name * link * locale * location * name * picture * timezone * username Unsupported :class:`.User` properties: * birth_date * nickname * phone * postal_code """ user_authorization_url = 'https://www.facebook.com/dialog/oauth' access_token_url = 'https://graph.facebook.com/oauth/access_token' # Correction merci à miohtama : # https://github.com/peterhudec/authomatic/issues/112 user_info_url = 'https://graph.facebook.com/me?fields=' \ 'id,email,name,first_name,last_name,address,gender,' \ 'hometown,link,timezone,verified,website,locale,languages' user_info_scope = ['email', 'user_about_me', 'user_birthday', 'user_location']