@benwilson512 thanks for the response!
I tried removing the ! at both get_user_by_email and get_by.
I also tried refactoring the SessionController to:
case Library.get_user_by_email(email) do
{user} ->
conn
|> put_view(LibraryApiWeb.SessionView)
|> render("token.json", user: user)
{nil} ->
conn
|> put_status(:unauthorized)
|> put_view(LibraryApiWeb.ErrorView)
|> render("401.json-api", %{detail: "Error logging in a user with that email and password"})
{:error, _reason} ->
conn
|> put_status(:unauthorized)
|> put_view(LibraryApiWeb.ErrorView)
|> render("401.json-api", %{detail: "Error logging in a user with that email and password"})
end
but the following error bugged me:
iex(1)> [info] POST /api/session
iex(1)> [debug] Processing with LibraryApiWeb.SessionController.create/2
Parameters: %{"email" => "maria@hello.com", "password" => "[FILTERED]"}
Pipelines: [:api]
iex(1)> [debug] QUERY OK source="users" db=0.0ms
SELECT u0."id", u0."email", u0."password_hash", u0."username", u0."inserted_at", u0."updated_at" FROM "users" AS u0 WHERE (u0."email" = $1) ["maria@hello.com"]
iex(1)> [info] Converted error {:case_clause, %LibraryApi.Library.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, email: "maria@hello.com", id: 4, inserted_at: ~N[2019-05-12 08:41:18], password: nil, password_confirmation: nil, password_hash: "$2b$12$7qHpuOzPJaJShZoO4DCmAe9K/vHvsGwGPRlVmGzHQUlLkCBpgOZ82", updated_at: ~N[2019-05-12 08:41:18], username: "maria"}} to 500 response
iex(1)> [info] Sent 500 in 78ms
iex(1)> [error] #PID<0.451.0> running LibraryApiWeb.Endpoint (connection #PID<0.450.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: POST /api/session
** (exit) an exception was raised:
** (CaseClauseError) no case clause matching: %LibraryApi.Library.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, email: "maria@hello.com", id: 4, inserted_at: ~N[2019-05-12 08:41:18], password: nil, password_confirmation: nil, password_hash: "$2b$12$7qHpuOzPJaJShZoO4DCmAe9K/vHvsGwGPRlVmGzHQUlLkCBpgOZ82", updated_at: ~N[2019-05-12 08:41:18], username: "maria"}
(library_api) lib/library_api_web/controllers/session_controller.ex:7: LibraryApiWeb.SessionController.create/2
(library_api) lib/library_api_web/controllers/session_controller.ex:1: LibraryApiWeb.SessionController.action/2
(library_api) lib/library_api_web/controllers/session_controller.ex:1: LibraryApiWeb.SessionController.phoenix_controller_pipeline/2
(library_api) lib/library_api_web/endpoint.ex:1: LibraryApiWeb.Endpoint.instrument/4
(phoenix) lib/phoenix/router.ex:275: Phoenix.Router.__call__/1
(library_api) lib/library_api_web/endpoint.ex:1: LibraryApiWeb.Endpoint.plug_builder_call/2
(library_api) lib/library_api_web/endpoint.ex:1: LibraryApiWeb.Endpoint.call/2
(phoenix) lib/phoenix/endpoint/cowboy2_handler.ex:33: Phoenix.Endpoint.Cowboy2Handler.init/2
(cowboy) d:/@@@/@gilbertc77/library_api/deps/cowboy/src/cowboy_handler.erl:41: :cowboy_handler.execute/2
(cowboy) d:/@@@/@gilbertc77/library_api/deps/cowboy/src/cowboy_stream_h.erl:296: :cowboy_stream_h.execute/3
(cowboy) d:/@@@/@gilbertc77/library_api/deps/cowboy/src/cowboy_stream_h.erl:274: :cowboy_stream_h.request_process/3
(stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
There is a line in that iex console dump that catches my eye
iex(1)> [info] Converted error {:case_clause, %LibraryApi.Library.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, email: "maria@hello.com", id: 4, inserted_at: ~N[2019-05-12 08:41:18], password: nil, password_confirmation: nil, password_hash: "$2b$12$7qHpuOzPJaJShZoO4DCmAe9K/vHvsGwGPRlVmGzHQUlLkCBpgOZ82", updated_at: ~N[2019-05-12 08:41:18], username: "maria"}} to 500 response
What does Converted error mean?
Also there was a warning before that:
warning: this clause cannot match because a previous clause at line 8 always matches
lib/library_api_web/controllers/session_controller.ex:12


















