Most likely I have copied and pasted something wrong. It is necessary to open a new topic on authentication.
** (exit) an exception was raised:
** (CaseClauseError) no case clause matching: true
(imcon) lib/imcon_web/controllers/api/v1/session_controller.ex:7: ImconWeb.SessionController.create/2
(imcon) lib/imcon_web/controllers/api/v1/session_controller.ex:1: ImconWeb.SessionController.action/2
(imcon) lib/imcon_web/controllers/api/v1/session_controller.ex:1: ImconWeb.SessionController.phoenix_controller_pipeline/2
(imcon) lib/imcon_web/endpoint.ex:1: ImconWeb.Endpoint.instrument/4
(phoenix) lib/phoenix/router.ex:275: Phoenix.Router.call/1
(imcon) lib/imcon_web/endpoint.ex:1: ImconWeb.Endpoint.plug_builder_call/2
(imcon) lib/plug/debugger.ex:122: ImconWeb.Endpoint.“call (overridable 3)”/2
(imcon) lib/imcon_web/endpoint.ex:1: ImconWeb.Endpoint.call/2
(phoenix) lib/phoenix/endpoint/cowboy2_handler.ex:34: Phoenix.Endpoint.Cowboy2Handler.init/2
(cowboy) /opt/imcon/deps/cowboy/src/cowboy_handler.erl:41: :cowboy_handler.execute/2
(cowboy) /opt/imcon/deps/cowboy/src/cowboy_stream_h.erl:296: :cowboy_stream_h.execute/3
(cowboy) /opt/imcon/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
defmodule ImconWeb.SessionController do
use ImconWeb, :controller
plug :scrub_params, "session" when action in [:create]
def create(conn, %{"session" => %{"email" => email, "password" => password}}) do
case Imcon.Auth.authenticate(email, password) do
{:ok, user} ->
{:ok, jwt, _full_claims} = user |> Guardian.encode_and_sign(:token)
conn
|> put_status(:created)
|> render("show.json", jwt: jwt, user: user)
:error ->
conn
|> put_status(:unprocessable_entity)
|> render("error.json")
end
end
def delete(conn, _) do
{:ok, claims} = Guardian.Plug.current_claims(conn)
conn
|> Guardian.Plug.current_token
|> Guardian.revoke(claims)
conn
|> render("delete.json")
end
def unauthenticated(conn, _params) do
conn
|> put_status(:forbidden)
|> render(ImconWeb.SessionView, "forbidden.json", error: "Not Authenticated")
end
end
Fragment from file auth.ex
def authenticate(email, encrypted_password) do
query = Ecto.Query.from(u in User, where: u.email == ^email)
|> limit(1)
Repo.one(query)
|> check_password(encrypted_password)
end
defp check_password(user, password) do
case user do
nil -> Bcrypt.dummy_checkpw()
_ -> Bcrypt.checkpw(password, user.encrypted_password)
end
end