【OutSystems】アカウントロック時のメッセージをカスタマイズしよう

こんにちは、最近社員インタビューに記載された「I.t」です。
今回はOutSystemsにてアカウントロック時のメッセージをカスタマイズする方法を紹介します。

目次
▼実現したいこと
▼アカウントロックとは
▼そもそも直接のメッセージ編集は不可能?
▼対策法

実現したいこと
今回、とある現場で「アカウントロック時に指定のメッセージを表示したい」という要望を頂きました。
そのためデフォルトで設定されているメッセージを上書きして表示させます。

アカウントロックとは
前提としてアカウントロックという機能自体、OutSystemsにビルトインで用意されているUsersアプリケーションが提供しているものであり内容はとしてはログイン試行回数を一定以上満たすとアカウントにログインできなくなるような機能になります。

そもそも直接のメッセージ編集は不可能?
通常ログインに失敗し試行回数が一定に達すると画面上で以下のようなメッセージが表示されます。
このメッセージはUsersモジュール内部でデフォルト設定されているため、直接メッセージを書き換えることは不可能となります。
※基本提供されているモジュールの直編集は不可能

対策法
対策法としてはloginアクションを使用しているロジック内で例外アクションを使用し出力されたメッセージを上書きする方法があります。


●権限確認
最初にブロック状態を確認するにはユーザが「UserManager」ロールを持っている必要があるため、 Users提供のロールアクション「CheckUserManagerRole」を用いて権限確認を行います。 次に「GrantUserManagerRole」を用いてユーザに権限を付与します。 UserIdにはNullIdentifier()を設定します。

●ブロック状態を確認
Users提供のサーバアクション「User_GetBlockedStatus」を用いてブロックされているかの確認を行います。 Usernameにフォームで入力した値を設定します。


●権限剥奪
チェック時に権限を所有していなかった場合に権限を剥奪します。
Conditionには「not CheckUserManagerRole.HasRole」、UserIdには「NullIdentifier()」を設定します。

●権限剥奪
エラー原因がアカウントロックによるものであった場合、メッセージの上書を行います。
ブロック確認結果の値はUsers提供の静的エンティティ「LoginAttemptResult」によって管理されます。
Conditionには「User_GetBlockedStatus.LoginAttemptResult.LoginAttemptResult.Id
 = Entities.LoginAttemptResult.BlockedUser
」を設定します。
ExceptionMessageにはTrueの場合任意のメッセージ、Falseの場合は「InvalidLogin.ExceptionMessage」を設定します。

その後は呼び出し元のアクションにて先ほど出力されたメッセージを設定することで実装完了となります。

実際に動作確認すると以下メッセージが表示されます。

  • URLをコピーしました!
目次