【GAS】Cloud StorageのOAuth認証時に「Google ドキュメント内でエラーが発生しました。このページを・・・」が出てくる

1461 語
7 分
【GAS】Cloud StorageのOAuth認証時に「Google ドキュメント内でエラーが発生しました。このページを・・・」が出てくる

はじまり#

リサちゃん avatar
リサちゃん
なんか認証できなくなったぁぁ・・・
135ml avatar
135ml
うわあ、何だろこれマジで・・・
リサちゃん avatar
リサちゃん
1週間前からコード変えてないよ!?
135ml avatar
135ml
わけわかんねえな・・・

何が起こっているのか#

今回は、Google Apps Script(GAS)で、Googleドライブにある画像をGoogle Cloud Storage(GCS)にアップロードするために、GCSを認証する時のお話です。

まあ、Google Cloud Platform(GCP)で「APIとサービス」→「認証情報」→「OAuth 2.0 クライアント ID」の流れで、クライアントIDとクライアントシークレットを作っていつも通り認証します。 すると・・・

おお、何だこれは

まあ、数分後にリフレッシュすればいいんだな

そんな調子でリフレッシュしてみますが・・・

あれっ、同じ画面だ

どこのNPCかな?

原因を調査する#

結局、何分後に読み込み直しても、何時間後に読み込み直しても、依然として同じ画面が出続けます。 IDとシークレットを入れているscriptPropertiesのキーとかも問題ないし、OAuth2のライブラリがおかしいってことも無さそう。 (OAuth2のライブラリは、ライブラリID: 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDFのやつですね。)

僕が認証機能を作ったのが1週間前で、僕がOAuth2のリポジトリを見た時の更新日時が2ヶ月前でした。なので、OAuth2は問題じゃない。

この「Google ドキュメント内でエラーが発生しました。このページを再読み込みするか、数分後にこのページをもう一度開いてみてください。」の文章で調べると、だいたいブラウザの閲覧履歴を消すという対策が出てきましたが、その方法でも解消しませんでした。 Googleから、色々とトラブルシューティングの候補が挙げられています。(でもこれも関係無さそう・・・期間内に新しい拡張機能入れてないんだよな)

他には、PDFに変換する領域内に環境依存文字があることで同じエラー画面が出てくるらしいのです。なので、スプシの内容かと思いましたが、それは関係ありませんでした。(後述しますが)

なぜか認証機能が動いた#

そして、何をしたら動いたかと言うと・・・ ブックとシートを作り直して、そのGASに丸々同じものを書き写したら、動きました!!

この画面は、OAuthからのリダイレクト時に、こんなスクリプトで表示する手筈になっているものです。

/**
* @description 認証コールバック
* @return {null}
*/
function authCallback(request) {
let service = getStorageService(false);
let isAuthorized = service.handleCallback(request);
let statement = ``;
if (isAuthorized) {
console.log("Authorized!");
console.log(`authCallback: 111111111111111111111111111111111111111111111`);
statement = `<center>認証完了<br>タブを閉じてください。</center>`;
} else {
console.log("Not Authorized...");
console.log(`authCallback: 222222222222222222222222222222222222222222222`);
statement = `認証エラー<br>認証情報をお確かめください。`;
}
return HtmlService.createHtmlOutput(statement);
}
/**
* @description 認証用サービス取得
* @param {boolean} isInputting
* @return {}
*/
function getStorageService(isInputting) {
const keyClientId = KEY_CLIENT_ID_SCRIPT_PROPERTY;
const keyClientSecret = KEY_CLIENT_SECRET_SCRIPT_PROPERTY;
let cfg = getClientConfig(isInputting, keyClientId, keyClientSecret);
console.log(cfg);
console.log(`getStorageService: 111111111111111111111111111111111111111111111`);
if(cfg.clientId == null || cfg.clientSecret == null){
EXE_TYPE = "authentication";
const html = getHtmlOutput("index_html", "Authentication failed.")
SpreadsheetApp.getUi().showModelessDialog(html, "Authentication failed.", "<p>Because of the shotage of OAuth2.0 Client Information.</p>");
return null;
}
console.log(`getStorageService: 22222222222222222222222222222222222222222222`);
return OAuth2.createService("provisioning")
.setAuthorizationBaseUrl("https://accounts.google.com/o/oauth2/auth")
.setTokenUrl("https://accounts.google.com/o/oauth2/token")
.setClientId(cfg.clientId)
.setClientSecret(cfg.clientSecret)
.setCallbackFunction("authCallback")
.setPropertyStore(PropertiesService.getScriptProperties())
.setScope("https://www.googleapis.com/auth/devstorage.full_control")
.setParam("login_hint", Session.getActiveUser().getEmail())
}

ふーむ、意味が分からない・・・

ちなみに、認証機能ではシートは全く参照しないというのと、シートの内容も作り直す前のシートと同じ内容にしました。 なので、スプシの内容は僕の場合は関係無さそうでした。

思い当たる節は・・・#

そういえば、その1週間の間に、この認証機能があるブックの中にあるシートの内、AppSheetのデータベースとして連携させたものがあったなあ・・・ 新しいブックでは、まだAppSheetに連携させているデータベースはない・・・ じゃあ、AppSheetに連携させればまた動かなくなるのかも?(AppSheetっていうのは、ノーコードでアプリが作れるサービスのことです)

まあ、こんな感じで新しいブックをAppSheetのDBとして連携させます。

そして、認証させてみると・・・アレ?

認証通っちゃったなあ・・・ 結局、原因は分かりませんでした。

まとめ#

今回のまとめです。

今回、チェックした事柄#

今回チェックした事柄です。同じような事象が発生した時のチェック表としてご活用下さい。

  • 5分以上待ってからもう一度読み込む
  • シートの内容(環境依存文字が入ってたりしないか)
  • scriptPropertiesのキー
  • OAuth2ライブラリの挙動
  • ブラウザ(今回はChrome)の閲覧履歴の全消去
  • 別のブラウザを試す(普段使わないEdgeで試したりもしました)
  • その他ここに載っていること
  • AppSheetとの連携

今後、気を付けたいこと#

自分の今後の心掛けたいこととして、

  1. GASの不具合でどうしても分からないときはブックを作り直す・・・1時間詰まったら作り直そう。
  2. Gitは怠けずにブランチを切る・・・個人用途で作っているものなので、ほとんどmainブランチにpushしてしまっていました。なので、ブックを作り直す時にすぐにコードを再現させるために、新機能を作るたびにブランチを切るようにします。
  3. スクリプトは定期的に動かすようにする・・・今回の事象が発生し始めた日時が分からず、原因が突き止めきれませんでした。なので、普段からコードを動かして原因のスコープを狭めて、即座にデバッグできるようにします。
  4. OAuthなどの認証機能があるブックは機能を肥大化させない・・・作り直しの時に大変になるので。

Google Apps Scriptの関連書籍#

Google Apps Script × ChatGPTのツボとコツがゼッタイにわかる本amzn.to
Amazon.co.jpで購入する
Google Apps Script Webアプリ開発 第4版amzn.to
Amazon.co.jpで購入する
Google Apps Script目的別リファレンス 実践サンプルコード付き 第3版amzn.to
Amazon.co.jpで購入する
Google Apps Script クローリング&スクレイピングのツボとコツがゼッタイにわかる本amzn.to
Amazon.co.jpで購入する

おしまい#

リサちゃん avatar
リサちゃん
腑に落ちない!
135ml avatar
135ml
とりあえず動いて良かったがな・・・

以上になります!

記事を共有

この記事が役に立ったなら、ぜひ他の人と共有してください!

【GAS】Cloud StorageのOAuth認証時に「Google ドキュメント内でエラーが発生しました。このページを・・・」が出てくる
https://endorphinbath.com/posts/gas-gcs-auth-error-in-doc/
著者
kinkinbeer135ml
公開日
2024-01-14
ライセンス
CC BY-NC-SA 4.0
関連記事 スマート
1
【GAS】スプレッドシートに入力したキーワードで検索してヒットした画像をGoogleドライブに保存する
Code Google Apps ScriptでGoogle Spreadsheetに入力した文字で画像検索し、結果をGoogleドライブに保存する処理を書きます。Custom Search APIを使います。
2
【Google Apps Script】自分がGASで使うIDとかトークンを1つのシートで管理するライブラリを作ろうとしたけど、断念した話
Code Google Apps Scriptで使うフォルダIDやスプレッドシートIDなどを一括管理するライブラリをスプレッドシート上で作ろうと思ったのですが、とある理由により頓挫しました。貴方もお気を付け下さい。
3
【GAS】Googleカレンダーに曜日を指定してスケジュールを登録するスプレッドシートの構築
Code Google Apps Scriptを使い、スプレッドシートからGoogleカレンダーに曜日指定でスケジュールを追加するシステムを作りました。繰り返し入力する版と個別に入力する版があります。
4
【GAS】Vertex AI APIでブログのパーマリンクを自動生成する
Code Google CloudのVertex AIのGemini APIで、ブログ記事のパーマリンクをを作成していく流れを紹介する記事です。Google Apps Scriptで処理していきます。
5
【GAS、Google Spreadsheet】Googleドキュメントで日記を付けるために毎日Docファイルを作ってくれるスクリプトです
Code GoogleDriveにあるファイルを毎日決まった時間にコピーしてくれるスクリプトを書きました。日記をつける場合に毎回ファイルをコピーしてレイアウトを変えて・・・といった作業を効率化してしまいましょう!
ランダム記事 ランダム
Profile Image of the Author
kinkinbeer135ml
SIerをやめて、プログラミングを勉強しています。※Amazonアソシエイトに参加しています。
お知らせ
私のブログへようこそ!これはサンプルのお知らせです。
音楽
カバー

音楽

再生中なし

0:00 0:00
歌詞なし
カテゴリ
タグ
サイト統計
記事
287
カテゴリー
8
タグ
93
総文字数
486,174
運用日数
0
最終活動
0 日前

目次