This commit is contained in:
2023-02-18 10:50:52 +00:00
parent 931e22d0f7
commit ff8a0e6260
4 changed files with 38 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
defmodule PhoenixApiTemplateWeb.Auth.ErrorResponse.Unauthorized do
defexception message: "Unauthorized", plug_status: 401
end

View File

@@ -1,6 +1,7 @@
defmodule PhoenixApiTemplateWeb.UserController do
use PhoenixApiTemplateWeb, :controller
alias PhoenixApiTemplateWeb.Auth.ErrorResponse.Unauthorized
alias PhoenixApiTemplateWeb.Auth.Guardian
alias PhoenixApiTemplate.Accounts
alias PhoenixApiTemplate.Accounts.User
@@ -24,6 +25,18 @@ defmodule PhoenixApiTemplateWeb.UserController do
end
end
def sign_in(conn, %{"email" => email, "password" => password}) do
case Guardian.authenticate(email, password) do
{:ok, user, token} ->
conn
|> put_status(:ok)
|> render("user_token.json", %{user: user, token: token})
{:error, :unauthorized} ->
raise Unauthorized, message: "Invalid credentials"
end
end
def show(conn, %{"id" => id}) do
user = Accounts.get_user!(id)
render(conn, "show.json", user: user)

View File

@@ -1,5 +1,18 @@
defmodule PhoenixApiTemplateWeb.Router do
use PhoenixApiTemplateWeb, :router
use Plug.ErrorHandler
defp handle_errors(conn, %{reason: %Phoenix.Router.NoRouteError{message: message}}) do
conn
|> json(%{errors: message})
|> halt()
end
defp handle_errors(conn, %{reason: %{message: message}}) do
conn
|> json(%{errors: message})
|> halt()
end
pipeline :api do
plug(:accepts, ["json"])
@@ -10,5 +23,6 @@ defmodule PhoenixApiTemplateWeb.Router do
get("/", DefaultController, :index)
post("/register", UserController, :create)
post("/login", UserController, :sign_in)
end
end

8
test_requests/login.http Normal file
View File

@@ -0,0 +1,8 @@
POST http://localhost:4000/api/login HTTP/1.1
content-type: application/json
{
"email": "test4@yopmail.com",
"password": "yolo"
}