Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

GAS で呼び出し元のアカウントを判定して処理を振り分ける

More than 1 year has passed since last update.

社内システムやちょっとした Web アプリケーションを GAS で実装する際に、利用者の Google アカウントによって処理を振り分けたい時は Session Class を使うと便利です。

この一文で書きたいことを全て伝えてしまったのですが、この答えに辿り着くのに思いのほか時間が掛かってしまったので、記事にしたためておきます。

Tutorial

以下では Web アプリケーションとして公開した GAS 上で、呼び出し元のクライアントの情報を取得する例を示します。

新規スクリプトを作成して以下を実装してください。

getSessionInfo.gs
function doGet(e) {
  return makeSessionContent();
}

function makeSessionContent() {
  var result = {'Active User E-mail': Session.getActiveUser().getEmail(),
    'Active User Locale': Session.getActiveUserLocale(),
    'Effective User E-mail': Session.getEffectiveUser().getEmail(),
    'Script Time Zone': Session.getScriptTimeZone(),
    'Temporary Active User Key': Session.getTemporaryActiveUserKey()
  };

  var output = ContentService.createTextOutput(JSON.stringify(result));
  return output.setMimeType(ContentService.MimeType.JSON);
}

メニューから [公開] → [ウェブ アプリケーションとして導入…] をクリックし、表示されるダイアログのうち [次のユーザーとしてアプリケーションを実行:] を [ウェブ アプリケーションにアクセスしているユーザー] に、[アプリケーションにアクセスできるユーザー]を [全員] にしてください。
image.png
上記を設定した後、左下の [導入] ボタンをクリックしてください。
image.png
このようなダイアログが表示されるので、この URL をメモしておき、このスクリプトを作成した Google アカウント以外のアカウントで URL にアクセスし、Active User E-mail に現在ログインしているアカウントのメールアドレスが表示されているか確認してみてください。
image.png
URL にアクセスした際、このようなダイアログが表示されます。
[無題のプロジェクト] として表示されているプロジェクト名は GAS のファイル名(デフォルトだとコード.gs)が反映されます。

右下の [REVIEW PERMISSIONS] のボタンをクリックして、
image.png
利用するアカウントを選択してください。

なお、[次のユーザーとしてアプリケーションを実行:] を [自分] とした場合は Active User E-mail は null になり、Effective User E-mail にスクリプトを作成したアカウントのメールアドレスが表示されます。


正直なところ getActiveUser() で USER オブジェクトを取得し、その唯一のメソッドである getEmail() を取得するくらいしかこの API の使い所はないと思いますし、ちゃんとユーザー管理をしたいのであればちゃんとした認証機能を利用/実装するべきだとは思います。Auth0 とか便利ですよね。

それでも G Suite を導入している会社で社内システムを構築する場合など、手っ取り早く GAS で実装するのが楽ですし、ちょっとしたワークフローの開発などでは今回取り上げた Session Class で利用者の メールアドレスだけ取得できれば十分、というケースは割合あるかと思います。

そのうちクラスごと deprecated になりそうな気もしますが・・・

yuuhu04
エンジニアです。
https://zenn.dev/yuuhu04
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away