カスタマインを利用した個アプリへのIPアドレス制限について

はじめて投稿いたします。

現在カスタマインを利用して、ある1つのアプリにIPアドレス制限をかけるカスタマイズを作成しておりまして、躓いているのでこちらに投稿させていただきます。

まず、関係アプリは以下の2つです。
・勤怠管理アプリ
・IPアドレス管理アプリ(アクセスを許可するIPアドレスをこちらで管理)

実現したいことの大まかな流れは以下の通りです。
1.勤怠管理アプリの一覧表示のイベントで、ユーザーのアクセス元のIPアドレスを取得(「JavaScriptを実行する」のやることを使用)
2.1の完了後、IPアドレス管理アプリからレコードを取得する。
3.2の完了後、1で取得した値と、2で取得したレコードのIPアドレスフィールドを比較する
4.3の比較で、1で取得したIPアドレスが、2で取得した”アクセスを許可されているIPアドレスリスト”に合致するものが1つもなければ、Kintoneポータル画面に推移する。

直面しているしている問題としては、「JavaScriptを実行する」で、IPアドレスの取得が完了する前に、undefinedが返ってきてしまい、アクセス許可のIPアドレスリストとの比較ができないというものになります。

デバックしてみると、一度undefinedを返してから他の処理を実行し、後からJavaScriptを実行するに戻って、最終的にはIPアドレスの取得に成功しているようです。

ただ、これだと取得されたIPアドレスが比較値とならず、イメージ通りに動いてくれないため、IPアドレスが取得完了するまで次の処理に移らないように設定したいのですが、どのようにしたらよいかアドバイスを頂けないでしょうか。

実行したコードをコピー&ペーストしましょう

No. 45 JavaScriptを実行するの中身

(() => {
  "use strict";
  const getIPAddress = async () => {
    try {
      const response = await fetch('https://ipinfo.io/json');
      if (!response.ok) throw new Error('Failed to fetch IP information');
      const data = await response.json();
      return data.ip; // クライアントのIPアドレスを返す
    } catch (error) {
      console.error(error);
      return null; // エラー時はnullを返す
    }
  };

  // 使用例: 関数を呼び出してIPアドレスを取得
  getIPAddress().then((ip) => console.log(ip)).catch((err) => console.error(err));
})();

よろしくお願いいたします。

getIPAddress()の完了まで待機することが必要なので、以下のようにされてみては如何でしょうか?

(async () => {
  "use strict";
  const getIPAddress = async () => {
   // 省略
  };

  // 使用例: 関数を呼び出してIPアドレスを取得
  const ip = await getIPAddress();
  if (ip) console.log(ip);
  else console.log('エラー');
})();
1 Like

回答頂きありがとうございます!
コーティングそのものはエンジニアにお願いしているので、こちらの回答を伝えてみたいと思います。また上手く行かないようでしたら相談させてください。

@Takeh さま

いつもお世話になっております。cybozu developer network 運営チームです。

今回の投稿に関して、他の方が書いたコードを投稿し、デバッグに利用するような行為は、コミュニティのマナーに反するものと判断いたしました。

当コミュニティは、個人の知識の共有と成長を目的とした場です。

今後はこのような投稿を控えていただきますようお願いいたします。ご理解とご協力をお願い申し上げます。

ガイドラインの詳細については、こちらをご参照ください:FAQ - cybozu developer community

提携しているエンジニアが日本語話者ではない(英語も不可)のため、技術的な質問に関しては私がある程度内容を理解した上で投稿する他に方法がなく、通訳役として私が動いておりました。
第3者の書いたものを無許可で投稿してわけではない旨ご理解いただけますと幸いです。
ガイドラインには「許可を得ることなく、第三者のソースコードや画像などの知的財産を投稿しないでください。」とありますので、これには反さない認識でおります。

御礼遅くなりまして申し訳ありません。
こちら、ご協力いただいたおかげで解決できました、ありがとうございました!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。

状況について詳しくご説明いただき、ありがとうございます。

提携されているエンジニアの方が日本語や英語を話せないため、通訳としてご協力されていること、

そして投稿に関しては許可を得ていることを理解いたしました。

しかしながら、当コミュニティは、個人**(ご自身)**の知識の共有と成長を目的とした場であり、皆様が気持ちよく参加できる場であることを大切にしています。

そのため、今後は投稿内容がコミュニティの趣旨に沿っているかを再度ご確認いただき、

他のメンバーが不安や不快に感じることのないようご配慮いただけますと幸いです。

ご理解とご協力をお願い申し上げます。

何かご不明な点やご質問がございましたら、どうぞお気軽にお問い合わせください。