0
我提出这个呼吁:凤凰错误将用户添加到REST服务
curl -X POST -H "Content-Type: application/json" -d '{
"user": {
"email": "[email protected]",
"first_name": "Léo",
"last_name": "Hetsch",
"password": "notsosecure",
"username": "test1"
}
}' "http://localhost:4000/api/users"
并在服务器上,我得到:
[info] POST /api/users
[debug] Processing by VirtualTeams.UserController.create/2
Parameters: %{"user" => %{"email" => "[email protected]", "first_name" => "Léo", "last_name" => "Hetsch", "password" => "[FILTERED]", "username" => "test1"}}
Pipelines: [:api]
这是我user.ex文件:
schema "users" do
field :email, :string
field :password, :string
field :first_name, :string
field :last_name, :string
field :api_token, :string
field :username, :string
timestamps()
end
@doc """
Builds a changeset based on the `struct` and `params`.
"""
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:email, :password, :first_name, :last_name, :api_token, :username])
|> validate_required([:email, :password, :first_name, :last_name, :api_token, :username])
|> unique_constraint(:email)
|> unique_constraint(:username)
end
def create(params) do
changeset(%VirtualTeams.User{}, params)
|> put_change(:password, hashed_password(params["password"]))
|> put_change(:api_token, :base64.encode(:crypto.strong_rand_bytes(24)))
|> VirtualTeams.Repo.insert()
end
defp hashed_password(password) do
Comeonin.Pbkdf2.hashpwsalt(password)
end
只是为了验证我做过:
mix ecto.migrate
00:40:35.074 [info] Already up
为什么我得到一个错误?
UPDATE: 忘记的错误:
{"error":"error creating user"}
在我的控制器我有这样的代码,其中有错误:
def create(conn, %{"user" => user_params}) do
case User.create(user_params) do
{:ok, user} ->
conn
|> put_status(:created)
|> render("user.json", user: user)
{:error, changeset} ->
conn
|> put_status(:bad_request)
|> json(%{error: "error creating user"})
end
什么是错误? – Dogbert
你可以在错误情况下添加'IO.inspect(changeset)'吗?这应该在您的终端中打印详细的错误。 – Dogbert
在超级匆匆一瞥,你需要':api_token'字段,但不传递它的参数?如果你使用'User.create/1'返回的'{:error,changeset}'得到'changeset',那么跟踪错误会容易得多:) – whatyouhide