Skip to main content
Created for OutSystems 11. Not working on your version? Tell us about it!

 

 

 

 

 
Language:

 

 

 

 
 
OutSystems

ユーザーのログインへのロジックの追加

一部のシナリオでは、エンドユーザーのデフォルトのビルトインログインメカニズムを拡張する必要がある場合があります。 このような拡張が必要になる一般的なシナリオとして、以下のような場合があります。

  • 外部システムでユーザーがアクティブになっているかどうかを検証する
  • CAPTCHAの検証
  • 追加のログインデータ(ユーザー名とパスワード以外)を検証する

既存のエンドユーザーのログインロジックを正常に拡張するには、3つの手順を実行する必要があります。

  1. ユーザーのデータモデルを拡張する
  2. サーバー側の検証ロジックを作成する
  3. デフォルトのログインアクションを拡張する

ユーザーのデータモデルを拡張する

既存のユーザーデータモデルはOutSystemsのコアコンポーネントであるため、拡張することはできますが、変更することはできません。 しかし、拡張によってカスタマイズすることができ、コア認証メカニズムを引き続き利用することができます。

ユーザーのデータモデルを拡張するには、Userエンティティとの1対1のリレーションを持つ新しいエンティティを作成する必要があります。

以下の手順は、リアクティブWeb、モバイル、従来のWebの各アプリケーションに適用できます。

  1. [Login]画面が含まれるモジュール内で、[Data]タブに切り替えます。 (System)の下にUserエンティティへの参照があります。

    Userエンティティ

  2. UserExtendedという名前の新しいエンティティを追加します。

  3. Idアトリビュートのデータ型を「User Identifier」に変更します。 これでUserエンティティとUserExtensionエンティティの1対1のリレーションが作成されます。

    UserExtensionのIdアトリビュート

  4. 特定のユースケースに必要なアトリビュートを追加します。 たとえば、ExpirationDateという名前の_Date_データ型のアトリビュートを追加します。

    ExpirationDateアトリビュート

    ここで使用しているアトリビュートは一例です。 後で有効期限を確認します。 有効期限が現在の日付より後の場合、ユーザーはログインできます。 それ以外の場合、ユーザーはログインできません。 アトリビュートにデータを入力する機能を実装していないことに注意してください。 そのため、バックオフィスを作成するか、UserExtensionエンティティのレコードの作成を自動化する必要があります。

サーバー側の検証ロジックを作成する

セキュリティ上の理由により、認証関連の検証はすべてサーバー側(サーバーアクション内)で行う必要があります。

以下の手順では、有効期限が未来の日付であるかどうかを検証するサーバーアクションの作成について説明します。 逆の場合、有効期限が過去の日付のときは例外が発生します。

  1. [Logic]タブで、ValidateUserExpirationDateという名前の新しいサーバーアクションを作成します。

  2. _ValidateUserExpirationDate_サーバーアクションのフロー内に、UserExtensionエンティティのデータを取得するAggregateを追加します。 フィルタUserExtension.Id = GetUserId()を使用して、現在のユーザーのデータのみを取得します。

    ベストプラクティスとして、AggregateのMax. Recordsプロパティを「1」に設定することもできます。

  3. Aggregateの後にIfと条件GetUserExtensionById.List.Current.UserExtension.ExpirationDate >= CurrDate()を追加します。このとき、GetUserExtensionById_は前の手順で作成したAggregateの名前です。

  4. IfのTrueブランチをEndに接続します。

  5. IfのFalseブランチをRaise Exceptionに接続します。

    例外をまだ作成していない場合は新しい例外を作成する必要があります。

  6. フローは以下のようになります。

    ValidateUserExpirationDateのフロー

    特定のユースケースに応じて、さらに複雑な検証を定義することができます。 それには、サーバーアクションを特定の要件に応じて調整します。

デフォルトのログインアクションを変更する

実際のログインロジックは対象のアプリケーションのタイプによって異なります。

アプリケーションが従来のWebである場合、次のセクションはスキップしてください。

リアクティブWebおよびモバイル

複数の場所にデフォルトのログインロジックが実装されます。 [Interface]タブのCommon UIフローのに[Login]画面があります。 ログインすると、画面のLoginクライアントアクションが実行されます。 このクライアントアクションは、DoLoginサーバーアクションを実行して、サーバーにログイン情報を送信します。

このサーバーアクションは[Logic]タブのServer Actions > Authenticationフォルダにあります。

DoLoginサーバーアクション

ログインロジックの拡張はサーバー側(_DoLogin_アクション内)で行う必要があります。

既存のUser_Loginの後に、前のセクションで作成したValidateUserExpirationDateサーバーアクションに対する別のRun Server Actionを追加します。

拡張されたDoLogin

ValidateUserExpirationDateの定義方法が原因で、有効期限が過去の日付である場合、実際のログインは(例外の発生によって)中止されます。

従来のWeb

[Interface]タブのCommon UIフローにある[Login]画面内にデフォルトのログインロジックが実装されます。

User_Loginのすぐ後に、先ほど作成したValidateUserExpirationDateサーバーアクションに対するRun Server Actionを追加します。

Login画面アクション

有効期限が過去の日付のときは、ValidateUserExpirationDate内で例外が発生します。 そのため、ログインは中止されます。

  • Was this article helpful?