2017-05-21 5 views
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_tokenchangeset/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 
+0

무엇이 오류입니까? – Dogbert

+1

에러 케이스에'IO.inspect (changeset)'를 추가 할 수 있습니까? 그러면 터미널에 자세한 오류가 출력됩니다. – Dogbert

+0

슈퍼 킥 (superquick glance)에서는': api_token' 필드가 필요하지만 params에는 전달하지 않습니다. 'User.create/1'에 의해 반환 된'{: error, changeset}'에서 얻은'changeset'를 사용하면 에러를 추적하는 것이 훨씬 더 쉽습니다 :) – whatyouhide

답변

1

, 그러나 요청에서 매개 변수에 존재하지 않습니다. 일반적으로

, 그것은 실패한 것을 확인보기 위해 (이 경우 create/1에 의해 반환) {:error, changeset}에서 changeset을 살펴 얻기 위해 유용합니다.