Ash FrameworkAF
Ash Frameworkโ€ข3y agoโ€ข
26 replies
harry

`AshPhoenix.Form` not applying changes

I am using forms as below:
  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

And the action :new_account is as follows:
    create :new_account do
      accept([:email, :password])

      change(
        {Project.Changes.MaybeHashSecret, changeset_key: :new_password, resource_key: :password}
      )
    end

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
  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

Any ideas?
Was this page helpful?