mirror of
https://github.com/kevin-DL/phoenix_api_template.git
synced 2026-01-11 18:54:33 +00:00
Login
This commit is contained in:
3
lib/phoenix_api_template_web/auth/error_response.ex
Normal file
3
lib/phoenix_api_template_web/auth/error_response.ex
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
defmodule PhoenixApiTemplateWeb.Auth.ErrorResponse.Unauthorized do
|
||||||
|
defexception message: "Unauthorized", plug_status: 401
|
||||||
|
end
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
defmodule PhoenixApiTemplateWeb.UserController do
|
defmodule PhoenixApiTemplateWeb.UserController do
|
||||||
use PhoenixApiTemplateWeb, :controller
|
use PhoenixApiTemplateWeb, :controller
|
||||||
|
|
||||||
|
alias PhoenixApiTemplateWeb.Auth.ErrorResponse.Unauthorized
|
||||||
alias PhoenixApiTemplateWeb.Auth.Guardian
|
alias PhoenixApiTemplateWeb.Auth.Guardian
|
||||||
alias PhoenixApiTemplate.Accounts
|
alias PhoenixApiTemplate.Accounts
|
||||||
alias PhoenixApiTemplate.Accounts.User
|
alias PhoenixApiTemplate.Accounts.User
|
||||||
@@ -24,6 +25,18 @@ defmodule PhoenixApiTemplateWeb.UserController do
|
|||||||
end
|
end
|
||||||
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
|
def show(conn, %{"id" => id}) do
|
||||||
user = Accounts.get_user!(id)
|
user = Accounts.get_user!(id)
|
||||||
render(conn, "show.json", user: user)
|
render(conn, "show.json", user: user)
|
||||||
|
|||||||
@@ -1,5 +1,18 @@
|
|||||||
defmodule PhoenixApiTemplateWeb.Router do
|
defmodule PhoenixApiTemplateWeb.Router do
|
||||||
use PhoenixApiTemplateWeb, :router
|
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
|
pipeline :api do
|
||||||
plug(:accepts, ["json"])
|
plug(:accepts, ["json"])
|
||||||
@@ -10,5 +23,6 @@ defmodule PhoenixApiTemplateWeb.Router do
|
|||||||
|
|
||||||
get("/", DefaultController, :index)
|
get("/", DefaultController, :index)
|
||||||
post("/register", UserController, :create)
|
post("/register", UserController, :create)
|
||||||
|
post("/login", UserController, :sign_in)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
8
test_requests/login.http
Normal file
8
test_requests/login.http
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
POST http://localhost:4000/api/login HTTP/1.1
|
||||||
|
content-type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"email": "test4@yopmail.com",
|
||||||
|
"password": "yolo"
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user