Merge branch 'Evarin/signaux' into 'master'
Signaux de création See merge request klub-dev-ens/authens!24
This commit is contained in:
commit
3cd466fba0
3 changed files with 42 additions and 2 deletions
28
README.md
28
README.md
|
@ -79,7 +79,11 @@ AUTHENS_USE_OLDCAS = False
|
||||||
Il peut être utile de définir ce paramètre.
|
Il peut être utile de définir ce paramètre.
|
||||||
|
|
||||||
|
|
||||||
## Création d'utilisateurices
|
## Utilisation
|
||||||
|
|
||||||
|
À lire
|
||||||
|
|
||||||
|
### Création d'utilisateurices
|
||||||
|
|
||||||
AuthENS maintient une tables des comptes clipper connus.
|
AuthENS maintient une tables des comptes clipper connus.
|
||||||
Cette table est automatiquement mise à jour lors qu'une personne se connecte via
|
Cette table est automatiquement mise à jour lors qu'une personne se connecte via
|
||||||
|
@ -111,7 +115,9 @@ def create_user_view(requests, cas_login: str):
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Migration depuis `django_cas_ng`
|
## Utilisation avancée
|
||||||
|
|
||||||
|
### Migration depuis `django_cas_ng`
|
||||||
|
|
||||||
Pour migrer depuis `django_cas_ng`, il est recommandé de faire une
|
Pour migrer depuis `django_cas_ng`, il est recommandé de faire une
|
||||||
[data migration](https://docs.djangoproject.com/en/3.1/howto/writing-migrations/#migrating-data-between-third-party-apps)
|
[data migration](https://docs.djangoproject.com/en/3.1/howto/writing-migrations/#migrating-data-between-third-party-apps)
|
||||||
|
@ -138,3 +144,21 @@ def migrate_user(user: User):
|
||||||
user=user, cas_login=user.username, entrance_year=entrance_year
|
user=user, cas_login=user.username, entrance_year=entrance_year
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Utilisation des signaux
|
||||||
|
|
||||||
|
Authens émet le signal `authens.signals.post_cas_connect` à chaque fois qu'un
|
||||||
|
compte CAS se connecte. Le signal est envoyé avec les arguments suivants :
|
||||||
|
|
||||||
|
- `sender` : la classe Django utilisée pour stocker l'utilisateurice
|
||||||
|
(vraisemblablement la class `User` par défaut);
|
||||||
|
|
||||||
|
- `instance` : l'utilisateurice concerné⋅e;
|
||||||
|
|
||||||
|
- `created` : un booléen valant `True` si l'utilisateurice vient d'être créé⋅e
|
||||||
|
(première connexion);
|
||||||
|
|
||||||
|
- `cas_login` : le login CAS de la personne;
|
||||||
|
|
||||||
|
- `attributes` : un dictionnaire contenant des informations supplémentaires sur
|
||||||
|
le compte, fournies par le CAS.
|
||||||
|
|
|
@ -2,6 +2,7 @@ from django.contrib.auth import get_user_model
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
from authens.models import CASAccount, OldCASAccount
|
from authens.models import CASAccount, OldCASAccount
|
||||||
|
from authens.signals import post_cas_connect
|
||||||
from authens.utils import get_cas_client, parse_entrance_year
|
from authens.utils import get_cas_client, parse_entrance_year
|
||||||
|
|
||||||
UserModel = get_user_model()
|
UserModel = get_user_model()
|
||||||
|
@ -94,6 +95,7 @@ class ENSCASBackend:
|
||||||
if entrance_year is None:
|
if entrance_year is None:
|
||||||
raise ENSCASError("Entrance year not available")
|
raise ENSCASError("Entrance year not available")
|
||||||
|
|
||||||
|
account_created = False
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
try:
|
try:
|
||||||
user = UserModel.objects.get(cas_account__cas_login=cas_login)
|
user = UserModel.objects.get(cas_account__cas_login=cas_login)
|
||||||
|
@ -114,6 +116,15 @@ class ENSCASBackend:
|
||||||
CASAccount.objects.create(
|
CASAccount.objects.create(
|
||||||
user=user, entrance_year=entrance_year, cas_login=cas_login
|
user=user, entrance_year=entrance_year, cas_login=cas_login
|
||||||
)
|
)
|
||||||
|
account_created = True
|
||||||
|
|
||||||
|
post_cas_connect.send(
|
||||||
|
UserModel,
|
||||||
|
instance=user,
|
||||||
|
created=account_created,
|
||||||
|
cas_login=cas_login,
|
||||||
|
attributes=attributes,
|
||||||
|
)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
# Django boilerplate.
|
# Django boilerplate.
|
||||||
|
|
5
authens/signals.py
Normal file
5
authens/signals.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import django.dispatch
|
||||||
|
|
||||||
|
# Envoyé depuis authens.backends.ENSCASBackend
|
||||||
|
# Doc dans le README.
|
||||||
|
post_cas_connect = django.dispatch.Signal()
|
Loading…
Reference in a new issue