mirror of
https://github.com/team-alembic/ash_authentication.git
synced 2024-09-20 05:13:10 +12:00
improvement: support generating sign in tokens on register (#421)
* improvement: support generating sign in tokens on register * chore: run formatter. * fix: support generating tokens for other strategies. --------- Co-authored-by: James Harton <james@harton.nz>
This commit is contained in:
parent
018caf07fa
commit
e9ae747de7
1 changed files with 21 additions and 4 deletions
|
@ -10,15 +10,32 @@ defmodule AshAuthentication.GenerateTokenChange do
|
|||
@doc false
|
||||
@impl true
|
||||
@spec change(Changeset.t(), keyword, Change.context()) :: Changeset.t()
|
||||
def change(changeset, _opts, _) do
|
||||
def change(changeset, options, context) do
|
||||
changeset
|
||||
|> Changeset.after_action(fn _changeset, result ->
|
||||
|> Changeset.after_action(fn changeset, result ->
|
||||
{:ok, strategy} = Info.find_strategy(changeset, context, options)
|
||||
|
||||
if Info.authentication_tokens_enabled?(result.__struct__) do
|
||||
{:ok, token, _claims} = Jwt.token_for_user(result)
|
||||
{:ok, %{result | __metadata__: Map.put(result.__metadata__, :token, token)}}
|
||||
{:ok, generate_token(changeset.context[:token_type] || :user, result, strategy)}
|
||||
else
|
||||
{:ok, result}
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
defp generate_token(purpose, record, strategy)
|
||||
when purpose in [:user, :sign_in] and is_integer(strategy.sign_in_token_lifetime) do
|
||||
{:ok, token, _claims} =
|
||||
Jwt.token_for_user(record, %{"purpose" => to_string(purpose)},
|
||||
token_lifetime: strategy.sign_in_token_lifetime
|
||||
)
|
||||
|
||||
Ash.Resource.put_metadata(record, :token, token)
|
||||
end
|
||||
|
||||
defp generate_token(purpose, record, _strategy) do
|
||||
{:ok, token, _claims} = Jwt.token_for_user(record, %{"purpose" => to_string(purpose)})
|
||||
|
||||
Ash.Resource.put_metadata(record, :token, token)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue