Problem with Pbkdf2.hash_pwd_salt(password)

I have a nested map and I want to enter a password_hash value in a field.
map = %{
“city” => “Meadville”,
“credential” => %{
“email” => “don@mail”,
“password” => “qwerty”,
“password_hash” => “”
“firstname” => “Don”,
“lastname” => “Whitbeck”,
“phoneone” => “xxx-xxx-xxxx”,
“phonetwo” => “”,
“spousename” => “xxx”,
“state” => “xx”,
“streetaddress” => “xxxx”,
“username” => “donwhit”,
“zipcode” => “xxxxxx”

In iex everything works
iex> password = get_in(map, [“credential”, “password”])
iex > hash = Pbkdf2.hash_pwd_salt(password)

Here is the puzzle.
when I compile this code and try to run this, I get errors.

In the browser I have
ArgumentError at GET /parents/new
errors were found at the given arguments:

The offending code line is - hash = Pbkdf2.hash_pwd_salt(password)
in the following function (partly shown here)

def changeset(parent, attrs) do # Create a parent
password = get_in(attrs, [“credential”, “password”])
hash = Pbkdf2.hash_pwd_salt(password) # offending line of code

I have tried a dozen ways to analyze this error with no results.

It seems that you send wrong data to the endpoint. There is no such field that you want and get_in/2 returns nil atom, which is not correct IO list.


Thank you for your quick response, I input the data into a template using form_for.
in my function. I inspected the data in this function
def changeset(parent, attrs) do # Create a parent

IO.inspect(parent) # which produces output

__meta__: #Ecto.Schema.Metadata<:built, "parents">,
city: nil,
credential: #Ecto.Association.NotLoaded<association :credential is not loaded>,
current: "Y",
firstname: nil,
id: nil,
inserted_at: nil,
lastname: nil,
phoneone: nil,
phonetwo: nil,
spousename: nil,
state: nil,
streetaddress: nil,
title: nil,
updated_at: nil,
username: nil,
zipcode: nil

IO.inspect(attrs) # which produces output - note I only filled in the minimum required fields
"city" => "",
"credential" => %{
"email" => "whit@mail",
"password" => "qwerty",
"password_hash" => ""
"firstname" => "Don",
"lastname" => "Whitbeck",
"phoneone" => "",
"phonetwo" => "",
"spousename" => "",
"state" => "",
"streetaddress" => "",
"username" => "donwhit",
"zipcode" => ""
password = get_in(attrs, ["credential", "password"]) # next line of code

IO.inspect(password) # which produces


You can wrap your code with ``` to make it more readable.

I have edited your last post, to show You the difference :slight_smile:

A typical “new” action initializes a changeset with attributes of %{}; that would cause exactly this error message.

many thanks