Current section
Files
Jump to
Current section
Files
lib/phoenix_token_auth/controllers/sessions_controller.ex
defmodule PhoenixTokenAuth.Controllers.Sessions do
use Phoenix.Controller
alias PhoenixTokenAuth.Util
alias PhoenixTokenAuth.Authenticator
plug PhoenixTokenAuth.Plug when action in [:delete]
@doc """
Log in as an existing user.
Parameter are "email" and "password".
Responds with status 200 and {token: token} if credentials were correct.
Responds with status 401 and {errors: error_message} otherwise.
"""
def create(conn, %{"username" => username, "password" => password}) do
case Authenticator.authenticate_by_username(username, password) do
{:ok, user} -> json conn, %{access_token: Authenticator.generate_token_for(user), token_type: "bearer", id: user.id}
{:error, errors} -> Util.send_error(conn, errors, 401)
end
end
def create(conn, %{"email" => email, "password" => password}) do
case Authenticator.authenticate_by_email(email, password) do
{:ok, user} -> json conn, %{token: Authenticator.generate_token_for(user)}
{:error, errors} -> Util.send_error(conn, errors, 401)
end
end
@doc """
Destroy the active session.
Will delete the authentication token from the user table.
Responds with status 200 if no error occured.
"""
def delete(conn, _params) do
{:ok, token} = conn
|> Util.token_from_conn
tokens_left_after_delete = conn.assigns.authenticated_user.authentication_tokens
|> List.delete(token)
Util.repo.update!(%{conn.assigns.authenticated_user | authentication_tokens: tokens_left_after_delete})
json conn, :ok
end
end