16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-27

社内システムやちょっとした 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 になりそうな気もしますが・・・

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?