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.
|
||||
|
||||
|
||||
## Création d'utilisateurices
|
||||
## Utilisation
|
||||
|
||||
À lire
|
||||
|
||||
### Création d'utilisateurices
|
||||
|
||||
AuthENS maintient une tables des comptes clipper connus.
|
||||
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
|
||||
[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
|
||||
)
|
||||
```
|
||||
|
||||
### 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 authens.models import CASAccount, OldCASAccount
|
||||
from authens.signals import post_cas_connect
|
||||
from authens.utils import get_cas_client, parse_entrance_year
|
||||
|
||||
UserModel = get_user_model()
|
||||
|
@ -94,6 +95,7 @@ class ENSCASBackend:
|
|||
if entrance_year is None:
|
||||
raise ENSCASError("Entrance year not available")
|
||||
|
||||
account_created = False
|
||||
with transaction.atomic():
|
||||
try:
|
||||
user = UserModel.objects.get(cas_account__cas_login=cas_login)
|
||||
|
@ -114,6 +116,15 @@ class ENSCASBackend:
|
|||
CASAccount.objects.create(
|
||||
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
|
||||
|
||||
# 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