AttrCASBackend: Save user instance only when necessary
[fnpdjango.git] / fnpdjango / auth_backends.py
index 3cd60a7..7a89c1a 100644 (file)
@@ -10,13 +10,17 @@ attr_map = getattr(settings, 'CAS_USER_ATTRS_MAP', {
 class AttrCASBackend(CASBackend):
     def authenticate(self, ticket, service, request):
         user = super(AttrCASBackend, self).authenticate(ticket, service, request)
+        dirty = False
         for attr, value in request.session.get('attributes', {}).items():
             try:
                 local_attr = attr_map[attr]
             except KeyError:
                 pass
             else:
-                setattr(user, local_attr, value)
-        user.save()
+                if getattr(user, local_attr, None) != value:
+                    setattr(user, local_attr, value)
+                    dirty = True
+        if dirty:
+            user.save()
         return user