Ver código fonte

Merge commit '5889982e6b5f9d8f939390757d0afcc7b3bdfe8c' into TC

root 5 meses atrás
pai
commit
7f91226087
1 arquivos alterados com 38 adições e 3 exclusões
  1. 38 3
      google_api/models/res_users_settings.py

+ 38 - 3
google_api/models/res_users_settings.py

@@ -51,7 +51,8 @@ class ResUsersSettings(models.Model):
     def _google_authenticated(self):
         """Check if user is authenticated with Google"""
         self.ensure_one()
-        return bool(self.sudo().google_rtoken)
+        # Verificar que tenemos tanto refresh token como access token
+        return bool(self.sudo().google_rtoken and self.sudo().google_token)
 
     def _is_google_token_valid(self):
         """Check if Google token is still valid"""
@@ -93,11 +94,45 @@ class ResUsersSettings(models.Model):
         if not self._google_authenticated():
             return None
         
+        # Si el token no es válido, intentar renovarlo
         if not self._is_google_token_valid():
+            _logger.info(f"Token expired for user {self.user_id.name}, attempting refresh")
+            
+            # Intentar renovar el token
             if not self._refresh_google_token():
-                return None
+                _logger.warning(f"Token refresh failed for user {self.user_id.name}")
+                
+                # Si falla la renovación, verificar si aún tenemos refresh token
+                if not self.sudo().google_rtoken:
+                    _logger.error(f"No refresh token available for user {self.user_id.name}")
+                    return None
+                
+                # Intentar una vez más con un pequeño delay
+                import time
+                time.sleep(1)
+                _logger.info(f"Retrying token refresh for user {self.user_id.name}")
+                
+                if not self._refresh_google_token():
+                    _logger.error(f"Final token refresh attempt failed for user {self.user_id.name}")
+                    return None
         
-        return self.sudo().google_token
+        # Verificar que tenemos un token válido
+        token = self.sudo().google_token
+        if not token:
+            _logger.warning(f"No access token available for user {self.user_id.name}")
+            return None
+            
+        return token
+
+    def _clean_invalid_tokens(self):
+        """Clean invalid tokens when they can't be refreshed"""
+        self.ensure_one()
+        _logger.warning(f"Cleaning invalid tokens for user {self.user_id.name}")
+        self.sudo()._set_google_auth_tokens(False, False, False)
+        self.sudo().write({
+            'google_email': False,
+            'google_sync_enabled': False,
+        })
 
     def action_connect_google(self):
         """Connect user's Google account"""