2

Le problème:Comment utiliser les jetons d'actualisation avec Google Picker et Google Drive?

J'ai une application sur la plate-forme de script google, qui est destiné à permettre le chargement de Google Drive sans utiliser un compte. La fonctionnalité de téléchargement fonctionne bien, mais j'ai des problèmes avec les téléchargements très longs/gros. J'essaye de résoudre ceci depuis une semaine maintenant, surtout parce que j'ai besoin de tester l'expiration des jetons.

Lorsqu'un utilisateur essaie de télécharger un gros fichier (20/30 Go) sur le serveur, le jeton d'authentification expire Error Screenshot 1, puis j'obtiens cette erreur Error screenshot 2.

Donc ce dont j'ai besoin est d'utiliser un jeton qui expirera dans plus de 5 heures. J'ai essayé d'utiliser un jeton de rafraîchissement mais je me suis retrouvé très confus. J'ai créé le jeton d'actualisation dans OAuth 2.0 Playground.

choses que j'ai essayé:

  1. passer le jeton de rafraîchissement dans le setOAuthToken. (Rejeté par la fonction)
  2. Utilisez le jeton d'actualisation pour utiliser setOAuthToken mais il a échoué.

Questions

  1. Puis-je autoriser de façon permanente l'accès à l'application Picker? (puisque c'est toujours le même utilisateur qui accède au lecteur sur le code côté serveur)? Dois-je utiliser un jeton d'actualisation pour obtenir un jeton Auth (Authentification par jeton)?

Code d'origine:

var a = (new google.picker.PickerBuilder) 
 
    .addView(t) 
 
    .enableFeature(google.picker.Feature.NAV_HIDDEN) 
 
    .setOAuthToken("<?= ScriptApp.getOAuthToken(); ?>") 
 
    .enableFeature(google.picker.Feature.MULTISELECT_ENABLED) 
 
    .hideTitleBar() 
 
    .setSize(DIALOG_DIMENSIONS.width - 2, DIALOG_DIMENSIONS.height - 2) 
 
    
 
    .setCallback(pickerCallback).setOrigin(config.FORM_EMBED_DOMAIN) 
 
    .build() 
 

Toute aide sera très appréciée.

Répondre

0

afaik, le sélecteur ne peut pas prendre un jeton d'actualisation et l'utiliser pour renouveler ses jetons d'accès. Cela est presque certainement dû au fait que Refresh Tokens ne doit jamais être sur un périphérique non sécurisé tel qu'un navigateur.

La seule approche que je peux suggérer serait: -

A 1. ont un jeton Refresh sur un serveur sécurisé

  1. mettre en œuvre votre propre point final pour retourner un jeton d'accès en utilisant le rafraîchissement stocké Token

ou

B 1.Utilisez GAPI, immédiatement = true (ou mais vous obtenez actuellement un jeton d'accès)

  1. ont une fonction setTimeout/setInterval qui toutes les 59 minutes, obtient une nouvelle option à l'aide jeton d'accès A ou B

  2. Ajoutez cette valeur à l'objet Picker en recherchant la propriété interne dans laquelle le jeton d'accès est stocké.

Ceci est fugly et fragile, mais honnêtement je ne peux pas penser à une meilleure réponse.

+0

Merci beaucoup, je vais essayer les deux approches. –

+0

Bonjour @ponoyyid, merci encore pour votre aide. J'ai essayé d'utiliser vos recommandations pour résoudre mon problème mais je n'ai pas eu de chance. Pouvez-vous expliquer ce qui est "immédiat = vrai"? Je n'ai pas trouvé un moyen de percer dans l'objet Picker le nouveau jeton d'accès. Je suis capable de mettre à jour le jeton, mais comment puis-je mettre à jour sur l'objet Picker s'il est déjà créé/affiché? –

+0

immediate = true provoque l'actualisation sans aucune interface utilisateur. Il n'existe aucune méthode publiée pour mettre à jour le jeton d'un objet Picker créé. Ceci est un défaut de conception. Depuis JavaScript, toutes les propriétés sont accessibles, même si elles sont internes, ma suggestion était de creuser dans le code jusqu'à ce que vous trouviez la propriété interne. Comme je l'ai dit, fugement. – pinoyyid

0

Les solutions suggérées n'ont pas résolu le problème.

J'ai essayé la même chose en utilisant des formulaires Google, j'ai essayé de télécharger les mêmes fichiers que j'ai utilisés pour tester l'erreur décrite dans la question initiale. Il se trouve, j'ai exactement la même erreur!

Donc, je pense que c'est un cas de "travaillé comme design". J'ai déjà envoyé un rapport d'erreur à Google, nous avons un compte G Suite, j'espère que nous recevrons des retours. Mais je pense que ce n'est pas quelque chose de facile à résoudre.

Le principal problème avec l'alternative de formulaire Google, c'est qu'il nécessite un compte Gmail/Google, et si les fichiers que vous souhaitez télécharger sont plus gros que votre quota gratuit, le téléchargement échouera. J'essaie avec un compte personnel avec 21 Go (l'uploader) et un compte G Suite illimité (récepteur et propriétaire du formulaire).

0

Ainsi,

Après beaucoup de tests différentes options, la plus facile/solution la plus rapide est de limiter les clients à télécharger jusqu'à 3 fichiers (parce que vous pouvez télécharger 3 fichiers au moment pendant le début du processus). Lorsque vous essayez de télécharger le 4ème fichier, vous obtenez une erreur d'authentification.

Cas fermé!