In that case mix phx.gen.context Users User users --no-schema will suffice ![]()
Setting name and avatar should only happen on registration, or every time the user auths?
The first is easiest (basically what’s in the readme):
defmodule MyApp.Users.User do
use Ecto.Schema
use Pow.Ecto.Schema
use PowAssent.Ecto.Schema
schema "users" do
field :name, :string
field :picture, :string
pow_user_fields()
timestamps()
end
def user_identity_changeset(user_or_changeset, user_identity, attrs, user_id_attrs) do
user_or_changeset
|> Ecto.Changeset.cast(attrs, [:picture, :name])
|> pow_assent_user_identity_changeset(user_identity, attrs, user_id_attrs)
end
end
The second you would also need a custom context module to trigger when upserting the user identity, so the name/avatar gets updated on each auth request:
defmodule MyApp.UserIdentities do
use PowAssent.Ecto.UserIdentities.Context,
repo: MyApp.Repo,
user: MyApp.Users.User
def upsert(user, user_identity_params) do
MyApp.Repo.transaction fn ->
case pow_upsert(user, user_identity_params) do
{:ok, user} -> update_user(user, user_identity_params)
{:error, error} -> {:error, error}
end
end
end
defp update_user(user, user_identity_params) do
user
|> MyApp.Users.User.changeset(user_identity_params)
|> MyApp.Repo.update()
end
end
If you use the second, you have to remember to update the changeset so it casts :picture and :name, since user_identity_changeset only triggers when a user is created. You can also cast it right there in the context method.
Remember to add user_identities_context: MyApp.UserIdentities to the config.
Assent conforms the result to OpenID Connect Core 1.0 Standard Claims spec for all strategies (why for Github it’s picture instead of avatar_url). You can inspect the values in custom changeset or context if it’s only for dev purpose.


















