jeroen11dijk

jeroen11dijk

I made my own authentication forms using ash_authentication as basis so I have more flexibility especially when it comes to styling. It works for almost everything only the validations does not work for :request_password_reset_with_password. I set up my form like:

    form =
      AshPhoenix.Form.for_action(User, :request_password_reset_with_password,
        api: Account,
        as: "user",
        context: %{private: %{ash_authentication?: true}}
      )
      |> to_form()

And it does enter my validate form:

  def handle_event("validate", %{"user" => params}, socket) do
    %{form: form} = socket.assigns
    form = AshPhoenix.Form.validate(form, params)
    {:noreply, assign(socket, form: form)}
  end

where user has a validation on email:

  validations do
    validate match(:email, ~r/(^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$)/) do
      message "must be a valid email address"
    end
  end

And which also works for the registration form so Im not sure what Im doing wrong. Only resource I found was a discord archived support page where it was said to use:
context: %{private: %{ash_authentication?: true}}. But all of the examples of what Im trying to do can just use the validate and it seems to work, although using a bit of a different setup so if more information is needed let me know.

First 3 of 3 Posts Switch mode

zachdaniel

zachdaniel

Creator of Ash

Interesting :thinking:. I don’t think you’ll want to use that context thing, thats kind of a hack (and likely would have no effect in this case). When you say it doesn’t work do you mean the validation is not applied? Can you show the output of Ash.Resource.Info.action(User, :request_password_reset_with_password)?

jeroen11dijk

jeroen11dijk OP

That would be:

 %Ash.Resource.Actions.Read{
  arguments: [
    %Ash.Resource.Actions.Argument{
      allow_nil?: false,
      type: Ash.Type.CiString,
      name: :email,
      default: nil,
      private?: false,
      sensitive?: false,
      description: "The proposed identity to send reset instructions to.",
      constraints: [casing: nil, allow_empty?: false, trim?: true]
    }
  ],
  description: "Send password reset instructions to a user if they exist.",
  filter: nil,
  get_by: [],
  get?: false,
  manual: nil,
  metadata: [],
  modify_query: nil,
  name: :request_password_reset_with_password,
  pagination: false,
  preparations: [
    %Ash.Resource.Preparation{
      preparation: {AshAuthentication.Strategy.Password.RequestPasswordResetPreparation,
       []}
    }
  ],
  primary?: false,
  touches_resources: [],
  timeout: nil,
  transaction?: false,
  type: :read
}
zachdaniel

zachdaniel

Creator of Ash

Ah, okay, right. So, unfortunately, validations don’t work on read actions. I’ve been meaning to add a compatibility layer for this to allow validations to support queries in addition to change sets (essentially operating only on arguments). In the meantime, what you will need to do to work around this is add a preparation.

preparations do
  prepare ValidateEmail, where: [action_is(:request_password_reset_with_password)]
end

That ValidateEmail would be a standard hand-written preparation.

This is a pretty clear thing we can improve in the framework, and I hope to address this soon to make it a better experience.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
jonnycharles
I’m in search of an Elixir library that offers PDF generation capabilities similar to Ruby’s Prawn. While there have been discussions abo...
New
spammy
I’m looking to build a personal workflow to quickly deploy web applications written in elixir/phoenix, for local consumption (ie not on t...
New
dli
Before I dive in myself, did anyone successfully sprinkle Hologram into their existing LiveView app? Looking for hints regarding: Addi...
New
roeland
Kia ora, We have been using elixir-google-api to connect to Google Drive. However, with the updates to Tesla due to CVEs this is now bro...
New
bottlenecked
Hi all, I wanted to ask how the community is dealing with post-release steps. Today we have Ecto migrations, which make sure that the db...
New
rahultumpala
Hello, I have an Elixir backend that implements a custom protocol over TCP. I want to load test the backend and assess the performance o...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement