OutSystemsで自前のActionでユーザを作成したときに、作成したユーザでログインできない場合の対処法です。
Table of Contents
公式情報
GenerateSaltedMD5Hash Action (Deprecated)
GenerateSaltedSHA512Hash Action
現象
自作のAction中でUserエンティティをScreen Action中から作成しました。
動作確認のため、いったんAssignの中で、「password」を設定していました。
該当部分のScreen Actionはこんな感じ。
Excelでアップロードしたレコードをループして、それぞれ
- Userレコードを準備(Assign)
- UserレコードをDBに追加(CreateUser:デフォルトのUserエンティティが持っている1行追加のAction)
- 作ったレコードをアプリケーションのロールに設定(ロールのGrantアクション)
これで作成したユーザ(UserNameは渡した値、Passwordは「password」)でログインしてみたところ、「Invalid Login」となりました。
原因
Usersアプリケーションで確認してみたら確かにユーザが作成されていました。
さらにパスワードを同じ値(password)として変更してみるとログインできるようになる。
Users画面(Userの一覧表示画面)を作成して確認してみると、自分で作ったユーザには生の「password」が表示されているにもかかわらず、ほかのユーザは「9731……」のような値になっていました。
つまりセキュリティのため、何らかのエスケープ的処理が入っているということですね。
対策
Usersアプリからユーザを作ると正しくパスワードが設定されている以上、何らかの関数などがあるはず。
と思って探したら見つかりました。上の公式情報に記載した2つのアクションです。
今回は固定値なので、ループに入る直前で上記アクションを読んでパスワード文字列を用意しておきます。
GenerateSaltedMD5Hashは、Dependenies→PlatformPasswordUtilsの下にあります。
配置したら、生パスワードをパラメータとして設定。
生成したパスワード(ハッシュ値)は、配置したアクション経由でUserレコードに設定してやります。
Userを作り直したら無事にログインできました。
備考
GenerateSaltedMD5HashのヘルプによるとDeprecatedらしいので今から作るなら、GenerateSaltedSHA512Hashの方を使うべきですね。
私の開発環境ではデフォルトでは出てこなかったので、Logicレイヤ→Dependencies→PlatformPasswordUtilsを右クリックしてアクションを追加しました。
実際に試してみたところ、現時点では、どっちでハッシュ化したパスワードがDBに保存されていても問題なくログインできました。