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
|
||||
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)
|
||||
|
||||
@@ -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
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