0
나는이 호출했다 :피닉스 오류가
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"}
을 나는 오류가이 코드를 가지고 :
문제는:api_token
이
changeset/2
에 의해 요구되는 것으로 보인다
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
슈퍼 킥 (superquick glance)에서는': api_token' 필드가 필요하지만 params에는 전달하지 않습니다. 'User.create/1'에 의해 반환 된'{: error, changeset}'에서 얻은'changeset'를 사용하면 에러를 추적하는 것이 훨씬 더 쉽습니다 :) – whatyouhide