This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
defmodule LinkShortenerWeb.Api.V1.AccountsController do
|
||||
use LinkShortenerWeb, :controller
|
||||
|
||||
alias LinkShortener.Accounts
|
||||
alias LinkShortener.Accounts.User
|
||||
alias LinkShortenerWeb.Auth.Guardian
|
||||
|
||||
action_fallback LinkShortenerWeb.FallbackController
|
||||
|
||||
def sign_up(conn, %{"user" => user_params}) do
|
||||
with {:ok, %User{} = user} <- Accounts.register_user(user_params),
|
||||
{:ok, token, _claims} <- Guardian.encode_and_sign(user) do
|
||||
conn
|
||||
|> put_status(:created)
|
||||
|> render(:user, %{user: user, token: token})
|
||||
end
|
||||
end
|
||||
|
||||
def sign_in(conn, %{"email" => email, "password" => password}) do
|
||||
with {:ok, user, token} <- Guardian.authenticate(email, password) do
|
||||
conn
|
||||
|> put_status(:created)
|
||||
|> render(:user, %{user: user, token: token})
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,11 @@
|
||||
defmodule LinkShortenerWeb.Api.V1.AccountsJSON do
|
||||
alias LinkShortener.Links.Link
|
||||
|
||||
def user(%{user: user, token: token}) do
|
||||
%{
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
token: token
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -21,4 +21,11 @@ defmodule LinkShortenerWeb.FallbackController do
|
||||
|> put_view(html: LinkShortenerWeb.ErrorHTML, json: LinkShortenerWeb.ErrorJSON)
|
||||
|> render(:"404")
|
||||
end
|
||||
|
||||
def call(conn, {:error, :unauthorized}) do
|
||||
conn
|
||||
|> put_status(:unauthorized)
|
||||
|> put_view(html: LinkShortenerWeb.ErrorHTML, json: LinkShortenerWeb.ErrorJSON)
|
||||
|> render(:"401")
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user