documentation/dsls/DSL-AshAuthentication.AddOn.LogOutEverywhere.md

<!--
This file was generated by Spark. Do not edit it by hand.
-->
# AshAuthentication.AddOn.LogOutEverywhere

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




### authentication.add_ons.log_out_everywhere
```elixir
log_out_everywhere name \\ :log_out_everywhere
```


Log out everywhere add-on





### Arguments

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`name`](#authentication-add_ons-log_out_everywhere-name){: #authentication-add_ons-log_out_everywhere-name .spark-required} | `atom` |  | Uniquely identifies the add-on |
### Options

| Name | Type | Default | Docs |
|------|------|---------|------|
| [`action_name`](#authentication-add_ons-log_out_everywhere-action_name){: #authentication-add_ons-log_out_everywhere-action_name } | `atom` | `:log_out_everywhere` | The name of the action to generate. |
| [`argument_name`](#authentication-add_ons-log_out_everywhere-argument_name){: #authentication-add_ons-log_out_everywhere-argument_name } | `atom` | `:user` | The name of the user argument to the `:log_out_everywhere` action. |
| [`include_purposes`](#authentication-add_ons-log_out_everywhere-include_purposes){: #authentication-add_ons-log_out_everywhere-include_purposes } | `list(String.t)` |  | Limit the list of token purposes for which tokens will be revoked to those in this list, except those in `exclude_token_purposes`. |
| [`exclude_purposes`](#authentication-add_ons-log_out_everywhere-exclude_purposes){: #authentication-add_ons-log_out_everywhere-exclude_purposes } | `list(String.t)` | `["revocation"]` | Don't revoke tokens with these purposes when logging a user out everywhere. |
| [`apply_on_password_change?`](#authentication-add_ons-log_out_everywhere-apply_on_password_change?){: #authentication-add_ons-log_out_everywhere-apply_on_password_change? } | `boolean` | `false` | Automatically log out all active sessions whenever a password is changed. |





### Introspection

Target: `AshAuthentication.AddOn.LogOutEverywhere`



<style type="text/css">.spark-required::after { content: "*"; color: red !important; }</style>