LoginSignup
6
8

More than 3 years have passed since last update.

[GAS]GSuite API を実行する際の勘所

Posted at

要旨

企業の情シスとして GSuite の管理者してます。社員からの「パスワード忘れたお」メールがうざいので、GAS から API 叩いてリセットする仕組みを作りました。その際にはまったことを記します。

スクリプト

resetPassword
function resetPassword(id, pw){
  let userKey = id;                            // hoge@company.org
  let data = {
    "password": pw,                            // 仮パスワード
    "changePasswordAtNextLogin": true,         // ログイン後にパスワードの変更を強制
  }

  let res = AdminDirectory.Users.update(JSON.stringify(data),userKey);
  Logger.log(res);
}

はまったこと

API アクセスキーとかいるのいらないの?

結果的には不要でした。G Suite の管理コンソールにて Directory API の呼び出しを有効にすれば OK。

Enabling Google Advanced Services
(https://developers.google.com/apps-script/guides/services/advanced?hl=ja#enabling_advanced_services)

自ドメインの Google Drive 上の GAS スクリプトから API 経由で自ドメインのリソースを操作するのは無条件に許可されます。

GAS のマニュアルどれ読めばいいの?

まずはこちらを読みましょう。私はここにたどり着くのに 1 時間迷いました。

G Suite Developer > Admin SDK > Directory API > GAS
(https://developers.google.com/admin-sdk/directory/v1/quickstart/apps-script?hl=ja)

次いでユーザー操作 API の仕様を確認しましょう。

G Suite Admin SDK > Directory API > Users
(https://developers.google.com/admin-sdk/directory/v1/reference/users?hl=ja)

今回作成したパスワード上書きスクリプトは、update メソッドを使います。

G Suite Admin SDK > Directory API > Users.update
(https://developers.google.com/admin-sdk/directory/v1/reference/users/update?hl=ja)

これらのドキュメントを読んでも、GAS の関数として call する場合「第一引数に何を指定すればよいか」といった基本的な説明が見当たりませんでした。(userKey, data) の順で指定するも Parse Error、data にエントリーすると引数が一致しません、などなど。

試行錯誤の結果、(data, userKey)という直感に反した順序であることが判明。ひどい。

まとめ

GSuite API に関する日本語の記事は案外見つからないので、情シスな方々のお役に立てれば幸いです。

6
8
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
6
8