Current section

Files

Jump to
ash_authentication lib ash_authentication add_ons log_out_everywhere.ex
Raw

lib/ash_authentication/add_ons/log_out_everywhere.ex

defmodule AshAuthentication.AddOn.LogOutEverywhere do
@moduledoc """
Log out everywhere support.
Sometimes it's necessary to be able to invalidate all of a user's sessions
with a single action. This add-on provides this functionality.
In order to use this feature the following features must be enabled:
1. Tokens must be enabled.
2. The `authentication.tokens.store_all_tokens?` option is enabled.
3. The `authentication.tokens.require_token_presence_for_authentication?`
option is enabled.
4. For the `apply_on_password_change?` option, at least one password strategy
must be enabled.
## Example
```elixir
defmodule MyApp.Accounts.User do
use Ash.Resource,
extensions: [AshAuthentication],
domain: MyApp.Accounts
authentication do
tokens do
enabled? true
store_all_tokens? true
require_token_presence_for_authentication? true
end
add_ons do
log_out_everywhere do
apply_on_password_change? true
end
end
```
## Actions
By default the add-on will add a `log_out_everywhere` action which reverts all
the existing non-expired tokens for the user in question.
### Example
iex> strategy = Info.strategy!(Example.User, :log_out_everywhere)
...> {:ok, user} = Strategy.action(strategy, :log_out_everywhere, %{"user_id" => user_id()})
...> user.id == user_id()
true
"""
defstruct action_name: :log_out_everywhere,
apply_on_password_change?: false,
argument_name: nil,
name: :log_out_everywhere,
include_purposes: nil,
exclude_purposes: ["revocation"],
provider: :log_out_everywhere,
resource: nil
alias __MODULE__.{Dsl, Transformer, Verifier}
alias AshAuthentication.Strategy.Custom
use Custom, style: :add_on, entity: Dsl.dsl()
@type t :: %__MODULE__{
action_name: atom,
apply_on_password_change?: boolean,
argument_name: nil,
name: :log_out_everywhere,
provider: :log_out_everywhere,
resource: module
}
defdelegate transform(strategy, dsl), to: Transformer
defdelegate verify(strategy, dsl), to: Verifier
end