クリック画像の実寸表示

段ボール箱を机にした猫 ファイルメーカー(filemaker)のちらしの裏のメモ書き

TOP  >  FileMakerでメール認証処理を使用する
作成日:2025年01月27日

FileMakerでメール認証処理を使用する

イメージイラスト
にゃん太

どうも、にゃん太です

FileMakerで作成したカスタムAppは特定の人だけがアクセスする場合が多いと思いますが、不特定の人にアクセスさせる場合が無いわけではありません

そんな場合、メール認証で簡単な本人確認処理が有効です

今回のメモでは、メール認証処理について書いていきます


メール認証の仕組み

メール認証とは、メールアドレスを利用した認証の仕組みです
  1. ユーザーが認証画面にアクセス
  2. ユーザーIDやメールアドレスを入力
  3. システムから認証用URLや認証コードを記載したメールを送信
  4. ユーザーはURLへアクセスするか、認証コードを入力
  5. 認証完了
といった流れで処理されています
ここでは、メールアドレスを入力して認証コードを送信する方法で作成してみます

メールの送信設定

まずはFileMakerからメールを送信する設定を行います
FileMakerでは、「メールを送信」スクリプトステップが実装されていますので、それを使用します

メールを送信のオプション
「送信経由」として3つの選択肢があります
今回の趣旨としてはFileMakerServerからの自動送信が必要となりますので、SMTPかOAuthの2択ですね
それぞれ送信用設定が必要ですので、必要項目を入力します

SMTPのオプション OAuth 2.0 のオプション
後は自分のメールアドレスに試しに送信して……、無事届けばメール設定は完了です

認証コード

次に、認証コードの生成を行います
アルファベットや記号を含めても良いですが、数字だけで作られている事が多いので、それに倣って数字だけで作成します
方法としては乱数で0~9の値を取得し、それを桁数分繰り返す方法としましょう
桁数は固定の場合が多いですが、乱数で桁数も変わるようにしてみました

計算式

Int ( Random * 10 ) & Int ( Random * 10 ) & Int ( Random * 10 ) & Int ( Random * 10 ) & Int ( Random * 10 ) & Int ( Random * 10 ) & If ( Random > .5; Int ( Random * 10 ); "" ) & If ( Random > .5; Int ( Random * 10 ); "" )

これで、6~8桁の数字が生成できます
これをメールアドレスと共にテーブルに保存します
勿論、これが永久に有効ではいけませんので、有効期限も設定します
有効期限の長さはとりあえず30分としましょう

メール認証処理の作成

それでは実際に作成してみましょう
とりあえず簡単にレイアウトを作成します

レイアウト設計
次に、認証コードを保存するテーブルを作成します

テーブル設計
そして、認証コードの送信と認証処理のスクリプトを作成します

btn_認証コード送信

# ################################################## # 入力したメールアドレスに認証コードを送信する # ################################################## # サーバへ認証メール送信を指示 変数を設定 [$mail; 値: global::mail] サーバー上のスクリプト実行 [指定: 一覧から; 「server_送信実行」] 変数を設定 [##codeSend; 値: 1] ウインドウ内容の再表示 []

server_送信実行

# ################################################## # 認証コードの生成とメール送信 # ################################################## # 引数としてメールアドレスを取得 変数を設定 [$mail; 値: Get ( スクリプト引数 )] # 認証コードの生成 変数を設定 [$code; 値: $code & Int ( Random * 10 )] 変数を設定 [$code; 値: $code & Int ( Random * 10 )] 変数を設定 [$code; 値: $code & Int ( Random * 10 )] 変数を設定 [$code; 値: $code & Int ( Random * 10 )] 変数を設定 [$code; 値: $code & Int ( Random * 10 )] 変数を設定 [$code; 値: $code & Int ( Random * 10 )] 変数を設定 [$code; 値: $code & If ( Random > .5; Int ( Random * 10 ); "" )] 変数を設定 [$code; 値: $code & If ( Random > .5; Int ( Random * 10 ); "" )] # 有効期限は生成時の30分後 変数を設定 [$limit; 値: Get ( タイムスタンプ ) + 1800] レイアウト切り替え [「authenticationCode」(authenticationCode); アニメーション: なし] 新規レコード/検索条件 フィールド設定 [authenticationCode::mail; $mail] フィールド設定 [authenticationCode::code; $code] フィールド設定 [authenticationCode::limit; $limit] # 認証コードをメール送信 変数を設定 [$mailTitle; 値: "認証コード"] 変数を設定 [$mailBody; 値: "認証コードの送信テスト¶¶"] 変数を設定 [$mailBody; 値: "認証コード: " & authenticationCode::code & ¶] 変数を設定 [$mailBody; 値: "有効期限: " & authenticationCode::limit] メールを送信 [SMTPサーバー経由で送信; ダイアログなし; 宛先: $mail; トピック: $mailTitle; メッセージ: $mailBody]

btn_認証

# ################################################## # 入力内容を認証する # ################################################## # サーバで認証処理 変数を設定 [$mail; 値: global::mail] 変数を設定 [$code; 値: global::code] 変数を設定 [$json; 値: JSONSetElement ( $json; "mail"; $mail; 1 )] 変数を設定 [$json; 値: JSONSetElement ( $json; "code"; $code; 1 )] サーバー上のスクリプト実行 [指定: 一覧から; 「server_認証」; 引数: $json; 終了するまで待つ:オン] 変数を設定 [$result; 値: Get ( スクリプトの結果 )] If [Exact ( $result; "success" )] カスタムダイアログを表示 ["結果"; "認証成功"] Else カスタムダイアログを表示 ["結果"; "認証成功"] End If

server_認証

# ################################################## # 認証の実行 # ################################################## #引数としてメールアドレスと認証コードを取得 変数を設定 [$json; 値: Get ( スクリプト引数 )] 変数を設定 [$mail; 値: JSONGetElement ( $json; "mail" )] 変数を設定 [$code; 値: JSONGetElement ( $json; "code" )] # 現在のタイムスタプを取得(有効期限確認用) 変数を設定 [$limit; 値: Get ( タイムスタンプ )] # 有効な認証コードかを検証 レイアウト切り替え [「authenticationCode」(authenticationCode); アニメーション: なし] 検索モードに切り替え [一時停止: オフ] フィールド設定 [authenticationCode::mail; "==" & Substitute ( $mail; "@"; "\@" )] フィールド設定 [authenticationCode::code; "==" & $code] フィールド設定 [authenticationCode::code; ">=" & $limit] フィールド設定 [authenticationCode::used; "="] エラー処理 [オン] 検索実行 [] エラー処理 [オフ] If [Get ( 対象レコード数 )] フィールド設定 [authenticationCode::used; 1] 現在のスクリプト終了 [テキスト結果: "success"] Else 現在のスクリプト終了 [テキスト結果: "fail"] End If

これを実行してみます
起動して、「認証コードを送信」ボタンを押します

起動して認証コード送信ボタンを押下
無事届いたので、認証コードを送信して「認証」ボタンを押します

認証実行
無事、認証まで成功しました

認証成功
メモ書き終了の案内イラスト

以上で今日のメモ書きは終了です

内容はいかがでしたか?

もしご意見やご要望、誤りの指摘などありましたら、下記フォームよりお気軽にご連絡ください

ご連絡フォーム