Skip to content

Commit b1d4904

Browse files
authored
Merge pull request #364 from danschultzer/fix-nil-value-bug
Fix bug with nil user id change exception
2 parents c9e6b3b + 076c0cc commit b1d4904

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66

77
* [`PowPersistentSession.Plug.Cookie`] Now supports `:persistent_session_cookie_opts` to customize any options that will be passed on to `Plug.Conn.put_resp_cookie/4`
88

9+
### Bug fixes
10+
11+
* [`Pow.Ecto.Schema.Changeset`] Fixed bug where `Pow.Ecto.Schema.Changeset.user_id_field_changeset/3` update with `nil` value caused an exception to be raised
12+
913
## v1.0.15 (2019-11-20)
1014

1115
### Enhancements

lib/pow/ecto/schema/changeset.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,15 @@ defmodule Pow.Ecto.Schema.Changeset do
4545

4646
user_or_changeset
4747
|> Changeset.cast(params, [user_id_field])
48-
|> Changeset.update_change(user_id_field, &Schema.normalize_user_id_field_value/1)
48+
|> Changeset.update_change(user_id_field, &maybe_normalize_user_id_field_value/1)
4949
|> maybe_validate_email_format(user_id_field, config)
5050
|> Changeset.validate_required([user_id_field])
5151
|> Changeset.unique_constraint(user_id_field)
5252
end
5353

54+
defp maybe_normalize_user_id_field_value(value) when is_binary(value), do: Schema.normalize_user_id_field_value(value)
55+
defp maybe_normalize_user_id_field_value(any), do: any
56+
5457
@doc """
5558
Validates the password field.
5659

test/pow/ecto/schema/changeset_test.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ defmodule Pow.Ecto.Schema.ChangesetTest do
2626
refute changeset.valid?
2727
assert changeset.errors[:email] == {"can't be blank", [validation: :required]}
2828

29+
changeset = User.changeset(%User{email: "[email protected]"}, %{email: nil})
30+
refute changeset.valid?
31+
assert changeset.errors[:email] == {"can't be blank", [validation: :required]}
32+
2933
changeset = UsernameUser.changeset(%UsernameUser{}, Map.delete(@valid_params_username, "username"))
3034
refute changeset.valid?
3135
assert changeset.errors[:username] == {"can't be blank", [validation: :required]}

0 commit comments

Comments
 (0)