PowInvitation.Ecto.Schema (Pow v1.0.25) View Source
Handles the invitation schema for user.
Customize PowInvitation associations or fields
If you need to modify any of the associations or fields that PowInvitation
adds to the user schema, you can override them by defining them before
pow_user_fields/0
:
defmodule MyApp.Users.User do
use Ecto.Schema
use Pow.Ecto.Schema
use Pow.Extension.Ecto.Schema,
extensions: [PowInvitation]
schema "users" do
belongs_to :invited_by, __MODULE__
has_many :invited_users __MODULE__, foreign_key: :invited_by_id, on_delete: delete_all
field :invitation_token, :string
field :invitation_accepted_at, :utc_datetime
pow_user_fields()
timestamps()
end
end
Customize PowInvitation changeset
You can extract individual changeset methods to modify the changeset flow
entirely. As an example, this is how you can invite a user through email
while using username
as the user id field:
defmodule MyApp.Users.User do
use Ecto.Schema
use Pow.Ecto.Schema,
user_id_field: :username
import PowInvitation.Ecto.Schema,
only: [invitation_token_changeset: 1, invited_by_changeset: 2]
# ...
def invite_changeset(user_or_changeset, invited_by, attrs) do
user_or_changeset
|> cast(attrs, [:email])
|> validate_required([:email])
|> invitation_token_changeset()
|> invited_by_changeset(invited_by)
end
end
Link to this section Summary
Functions
Accepts an invitation.
Sets the invitation token.
Invites user.
Sets the invited by association.
Link to this section Functions
Specs
accept_invitation_changeset(Ecto.Schema.t() | Ecto.Changeset.t(), map()) :: Ecto.Changeset.t()
Accepts an invitation.
The changeset method in user schema module is called, and
:invitation_accepted_at
will be updated. The password can be set, and the
user id updated.
Specs
invitation_token_changeset(Ecto.Schema.t() | Ecto.Changeset.t()) :: Ecto.Changeset.t()
Sets the invitation token.
Specs
invite_changeset(Ecto.Schema.t() | Ecto.Changeset.t(), Ecto.Schema.t(), map()) :: Ecto.Changeset.t()
Invites user.
It's important to note that this changeset should not include the changeset
method in the user schema module if PowEmailConfirmation
has been enabled.
This is because the e-mail is assumed confirmed already if the user can
accept the invitation.
A unique :invitation_token
will be generated, and invited_by
association
will be set. Only the user id will be set, and the persisted user won't have
any password for authentication.
Calls invitation_token_changeset/1
and invited_by_changeset/2
.
Specs
invited_by_changeset(Ecto.Schema.t() | Ecto.Changeset.t(), Ecto.Schema.t()) :: Ecto.Changeset.t()
Sets the invited by association.