パッケージ版GaroonのRest API実行後のログアウトについて

背景・実現したいこと

ワークフロー承認後にスケジュール登録をAPIを利用して実施しております。

その際、処理は完了するのですが必ずユーザがログアウトしてしまいます。(ログイン画面が表示される)

ログイン画面を出さずに処理を続ける方法をご教授頂きたくよろしくお願いします。

 

 

利用したソースコード

利用しているGaroonのイベントと実際のソースサンプルは以下の通りです。

ちなみに、以下の記載したイベントのタイミング出なくても(コンソールで実施した場合でも)ログアウト処理されてしまいます。

Garoonの登録に利用しているイベント
workflow.request.approve.submit.success

利用しているAPI
/g/api/v1/schedule/events
https://developer.cybozu.io/hc/ja/articles/360000425163#step1

API実行用のクラス(上記イベントで実施するため同期処理で実施しています)
class CommunicationApi {
constructor() {
this.token = garoon.base.request.getRequestToken();
// 完了コード管理
this.ajax_complete = [];

// 時間間隔
this.check_interval = 1000;
}

/**
* JSON取得
* @param method メソッドタイプ(POST, GET)
* @param url APIエンドポイント
* @param param パラメータ
* @param headers ヘッダー(key: ヘッダー名, value: 値)
* @param func_success 成功時コールバック
* @param func_error 失敗時コールバック
* @param add_arg 追加引数
* @param complete_code 完了コード(非同期最終同期処理用)
* @param success_code 成功判定用ステータスコード(デフォルト200, 201を許可)
* @param async 非同期フラグ
*/
get_json(method, url, param, headers, func_success, func_error, add_arg, complete_code, success_code = [200, 201], async = true) {
let xhr = new XMLHttpRequest();
xhr.open(method, url, async);
this.ajax_complete[complete_code] = false;
Object.keys(headers).forEach(key => {
xhr.setRequestHeader(key, headers[key]);
});

xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && success_code.indexOf(xhr.status) >= 0) {
let result = JSON.parse(xhr.response);
func_success(result, add_arg);
if (complete_code != null) {
this.ajax_complete[complete_code] = true;
}
} else if (xhr.readyState === 4 && success_code.indexOf(xhr.status) === 0) {
func_error(xhr, add_arg);
if (complete_code != null) {
this.ajax_complete[complete_code] = true;
}
}
}

if (param !== null) {
xhr.send(JSON.stringify(param));
} else {
xhr.send();
}
}

/**
* 非同期チェック(非同期処理)
* @param after_func 完了後の処理
*/
check_ajax(after_func = null) {
let ajax_check = setInterval(() => {
let complete_flg = true;
Object.keys(this.ajax_complete).forEach(key => {
if (!this.ajax_complete[key]) {
complete_flg = false;
}
});
if (complete_flg) {
clearInterval(ajax_check);
if (after_func !== null) {
after_func();
}
}
}, this.check_interval);
}
}

 

自己解決したので以下に方法を共有します。

XMLHttpRequestでパスワード認証を利用しapiを実行していましたが

以下のgaroon.api+garoon.Promiseを利用したことでログアウトせずに同期処理が実現できました。

※おそらくパスワード認証が悪さをしていたのかもしれません。

https://developer.cybozu.io/hc/ja/articles/204564604