View Source AshAuthentication.Strategy.Custom behaviour (ash_authentication v4.0.0)

Define your own custom authentication strategy.

See the Custom Strategies guide for more information.

Summary

Types

A Strategy DSL Entity.

This is the DSL target for your entity and the struct for which you will implement the AshAuthentication.Strategy protocol.

Callbacks

If your strategy needs to modify either the entity or the parent resource then you can implement this callback.

If your strategy needs to verify either the entity or the parent resource then you can implement this callback.

Types

@type entity() :: Spark.Dsl.Entity.t()

A Strategy DSL Entity.

See Spark.Dsl.Entity for more information.

@type strategy() :: %{
  :__struct__ => module(),
  :strategy_module => module(),
  :resource => module(),
  optional(atom()) => any()
}

This is the DSL target for your entity and the struct for which you will implement the AshAuthentication.Strategy protocol.

The only required field is strategy_module which is used to keep track of which custom strategy created which strategy.

Callbacks

@callback transform(strategy(), Spark.Dsl.t()) ::
  {:ok, strategy()} | {:ok, Spark.Dsl.t()} | {:error, Exception.t()}

If your strategy needs to modify either the entity or the parent resource then you can implement this callback.

This callback can return one of three results:

  • {:ok, Entity.t} - an updated DSL entity - useful if you're just changing the entity itself and not changing the wider DSL state of the resource. If this is the response then the transformer will take care of updating the entity in the DSL state.
  • {:ok, Dsl.t} - an updated DSL state for the entire resource.
  • {:error, Exception.t} - a compilation-stopping problem was found. Any exception can be returned, but we strongly advise you to return a Spark.Error.DslError.
@callback verify(strategy(), Spark.Dsl.t()) :: :ok | {:error, Exception.t()}

If your strategy needs to verify either the entity or the parent resource then you can implement this callback.

This is called post-compilation in the @after_verify hook - see Module for more information.

This callback can return one of the following results:

  • :ok - everything is A-Okay.
  • {:error, Exception.t} - a compilation-stopping problem was found. Any exception can be returned, but we strongly advise you to return a Spark.Error.DslError.