View Source PowInvitation.Ecto.Schema (Pow v1.0.36)
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 functions 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
Summary
Functions
Accepts an invitation.
Sets the invitation token.
Invites user.
Sets the invited by association.
Functions
@spec accept_invitation_changeset(Ecto.Schema.t() | Ecto.Changeset.t(), map()) :: Ecto.Changeset.t()
Accepts an invitation.
The changeset function in user schema module is called, and
:invitation_accepted_at
will be updated. The password can be set, and the
user id updated.
@spec invitation_token_changeset(Ecto.Schema.t() | Ecto.Changeset.t()) :: Ecto.Changeset.t()
Sets the invitation token.
@spec 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
function 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
.
@spec invited_by_changeset(Ecto.Schema.t() | Ecto.Changeset.t(), Ecto.Schema.t()) :: Ecto.Changeset.t()
Sets the invited by association.