GASのウェブアプリでハマった記録

GAS(Google Apps Script)、スプレッドシートのオマケのExcelマクロ的なものかと思ったら、doGet()関数を書くだけでhttpアクセスを受ける関数をデプロイできるということで便利なサービスです。が、アクセス権限で微妙なハマり方をして原因に気づくまで時間がかかったので、自分がこれを見ていたら気づけたのに、という観点の文章を書き残しておくことにしました。

目的と症状

GASでデプロイしたウェブアプリが全員公開にできない。
不特定多数のユーザに公開する設定にしようとしたが、GoogleからログアウトしたブラウザでアクセスするとGoogleアカウントを要求されてしまう。

検索すると出てくる解説記事の内容とか

デプロイ時に実行アカウントとアクセス制限を選べるので「自分で実行」「全員・匿名にも公開」を選ぶこと、という解説記事が出てくる。
もちろん設定してあるので設定した通りに動かないことしかわからない。なんで他の人は同じ問題起きてないの?となってハマる。

原因

ウェブアプリURLの末尾(/exec以降)にスラッシュを追加し、URL構造でパラメータを渡していたこと。
デプロイ時に設定するアクセス権限設定の適用外と判断され、利用者に(おそらく作成者本人アカウントの)Googleログインを要求してしまう。

結論

exec以降にパラメータっぽいものを持たせる場合、パスを含むURL構造にすると権限でハマります。
ハッシュはdoGetの引数に入ってこなくてダメなので、何か渡したい場合はクエリパラメータ推奨、ということになるようです。
ちなみにscript.google.com/macros/s/xxx/exec?http://example.com/?q=yyy みたいなお行儀の悪いURLでアクセスしても、アプリ側の引数に最初の?以降のクエリパラメータ文字列全体が格納されていてそれ一発で受け取れるのでURLパスを受け取るのとほぼ同じような感じにはなります。