【Elixir】LiveView でパスワードが消えてしまう現象の解決方法
Elixir で LiveView でパスワードが消えてしまう現象がありました。
その解決方法メモ。
環境
- Elixir 1.14.2
- Phoenix 1.6.3
現象
以下のような LiveView を使用してログインフォームを作ったところ、パスワード欄に入力した値が消える現象が時折発生。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <.form
let={f}
for={@changeset}
id="login-form"
phx-change="validate"
phx-submit="save">
<%= label f, :email, "Email" %>
<%= text_input f, :email %>
<%= error_tag f, :email %>
<%= label f, :password, "Password" %>
<%= password_input f, :password %>
<%= error_tag f, :password %>
<div>
<%= submit "Save", phx_disable_with: "Saving..." %>
</div>
</.form>
|
原因
原因は パスワードの入力値は再利用できない とのことです。
これによってフォームのバリデーションチェックが走って changeset
が返って来たタイミングで再利用できないため削除されてしまうようです。
対策
changeset
の再設定時にパスワードの値を変更しない設定を入れることによって変更されなくなります。
具体的には phx_update: "ignore"
を足して上げるだけで解決できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <.form
let={f}
for={@changeset}
id="login-form"
phx-change="validate"
phx-submit="save">
<%= label f, :email, "Email" %>
<%= text_input f, :email %>
<%= error_tag f, :email %>
<%= label f, :password, "Password" %>
<%= password_input f, :password, phx_update: "ignore" %>
<%= error_tag f, :password %>
<div>
<%= submit "Save", phx_disable_with: "Saving..." %>
</div>
</.form>
|
参考