`AshPhoenix.Form` not applying changes
I am using forms as below:
And the action
I would expect on submit that my change is hashing the secret however it isn't and the change is running when the form is created. The change is also below
Any ideas?
def new(conn, _params) do
form = AshPhoenix.Form.for_create(Project.User, :new_account, api: Project.Accounts, as: "user")
render(conn, "new.html", changeset: form)
end
def create(conn, %{"user" => user_params} = _params) do
case AshPhoenix.Form.for_create(Project.User, :new_account, api: Project.Accounts, as: "user")
|> AshPhoenix.Form.submit(params: user_params) do
{:ok, user} ->
conn
|> put_flash(:info, "User created successfully.")
|> Project.UserAuth.log_in_user(user)
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
end def new(conn, _params) do
form = AshPhoenix.Form.for_create(Project.User, :new_account, api: Project.Accounts, as: "user")
render(conn, "new.html", changeset: form)
end
def create(conn, %{"user" => user_params} = _params) do
case AshPhoenix.Form.for_create(Project.User, :new_account, api: Project.Accounts, as: "user")
|> AshPhoenix.Form.submit(params: user_params) do
{:ok, user} ->
conn
|> put_flash(:info, "User created successfully.")
|> Project.UserAuth.log_in_user(user)
{:error, changeset} ->
render(conn, "new.html", changeset: changeset)
end
endAnd the action
:new_account:new_account is as follows: create :new_account do
accept([:email, :password])
change(
{Project.Changes.MaybeHashSecret, changeset_key: :new_password, resource_key: :password}
)
end create :new_account do
accept([:email, :password])
change(
{Project.Changes.MaybeHashSecret, changeset_key: :new_password, resource_key: :password}
)
endI would expect on submit that my change is hashing the secret however it isn't and the change is running when the form is created. The change is also below
def change(changeset, opts, _) do
changeset_key = Keyword.get(opts, :changeset_key, @default_changeset_key)
resource_key = Keyword.get(opts, :resource_key, @default_resource_key)
# TODO get working, not hashing secrets
with secret <- Ash.Changeset.get_argument_or_attribute(changeset, changeset_key),
true <- is_binary(secret),
hash <- Argon2.hash_pwd_salt(secret) do
Ash.Changeset.force_change_attribute(changeset, resource_key, hash)
else
_ -> changeset
end
end def change(changeset, opts, _) do
changeset_key = Keyword.get(opts, :changeset_key, @default_changeset_key)
resource_key = Keyword.get(opts, :resource_key, @default_resource_key)
# TODO get working, not hashing secrets
with secret <- Ash.Changeset.get_argument_or_attribute(changeset, changeset_key),
true <- is_binary(secret),
hash <- Argon2.hash_pwd_salt(secret) do
Ash.Changeset.force_change_attribute(changeset, resource_key, hash)
else
_ -> changeset
end
endAny ideas?
