1

ボタンだけを含むUIをユーザーに最初に提示するスクリプトがあります。そのボタンをクリックすると、スクリプトはドキュメントを調べて、一部のファイルの所有権を変更します。

スクリプトをロードすると、ユーザーは赤い枠線の付いた標準の「認証が必要」ページで迎えられます。ユーザーがボタンをクリックしてアプリに必要な権限を付与すると、ボタンのあるページに移動します。

ただし、ボタンをクリックすると、次のようなダイアログが表示されます。

エラーが発生しました:そのアクションを実行するには認証が必要です。

アプリは、スクリプトを実行するユーザーとして実行するように設定されており、スクリプトアクセスは「誰でも」に設定されています。

何が間違っているのかについて何か考えはありますか?

私のdoGet():

function doGet(e) {
  var app = UiApp.createApplication();

  var button = app.createButton('Transfer');
  app.add(button);

  var handler = app.createServerHandler('init');
  button.addClickHandler(handler);

  return app;
}

init()メソッドは、特定のフォルダー(スクリプト内のIDによって静的に設定されます)を調べ、現在のユーザーが所有するファイルを探し、所有権を別のユーザーに譲渡します。

function init() {
  // Create new log as a a Drive document
  var log = DocsList.createFile("Ownership Transfer Log");

  var user = Session.getActiveUser();

  var targetEmail = "newemail@example.com";
    transferFolderOwnership('[Drive folder ID]', user.getEmail(), targetEmail, log);
}

そしてtransferFolderOwnership:

function transferFolderOwnership(folderId, userEmail, targetEmail, log) {
  var rootFolder = DocsList.getFolderById(folderId);
  var files = rootFolder.getFiles();

  // Transfer files
  var file;
  for (var i = 0; i < files.length; i++) {
    file = DriveApp.getFileById(files[i].getId());
    if (file.getOwner() == userEmail) {
      file.transferOwnership(targetEmail);
    }
  }

  // Do the same for folders
}
4

1 に答える 1

1

使用しているライブラリには、スクリプトエディタから呼び出された場合にのみ付与できる認証が必要です(ライブラリのソースコードの最後を参照してください:) function googleOAuth_()。表示される最初の認証は、スクリプトの「ローカル」部分のみに対するものであり、他の認証は次のようになります。

ここに画像の説明を入力してください

これは既知の問題であり、最後の問題追跡システムの投稿の1つに記載されている回避策が考えられます。まだ試していませんが、行く方法かもしれないと思います...

于 2013-03-20T13:01:14.187 に答える